﻿using DSPRE.ROMFiles;
using System;
using System.Collections.Generic;
using System.Drawing;

namespace DSPRE.Resources {
    public static class PokeDatabase {
        public static class Area {
            public static string[] PtAreaIconValues = new string[] {
                "[00] City",
                "[01] City",
                "[02] Town 1",
                "[03] Town 2",
                "[04] Cave",
                "[05] Forest",
                "[06] Water",
                "[07] Field",
                "[08] Island",
                "[09] Wood"
            };
            public static string[] HGSSAreaIconValues = new string[] {
                "[002] Wood",
                "[009] Gray",
                "[017] Wall",
                "[048] Not displayed",
                "[131] Town",
                "[132] Cave",
                "[135] Field",
                "[152] Lake",
                "[165] Forest",
                "[166] Water"
            };
            public static string[] HGSSAreaProperties = new string[] {
                "[00] Unknown",
                "[01] Unknown",
                "[02] Unknown",
                "[03] Cave Animation",
                "[04] Hide Location Tag",
                "[05] Unknown",
                "[06] Unknown",
                "[07] Unknown",
                "[08] Unknown",
                "[09] Unknown",
                "[10] Unknown",
                "[11] Unknown",
                "[12] Unknown",
                "[13] Unknown",
                "[14] Unknown",
                "[15] Unknown",
                "[16] Unknown",
            };
        }
        public static class ShowName {
            public static string[] DPShowNameValues = new string[] {
                "[000] Show",
                "[001] Show",
                "[002] Show",
                "[003] Show",
                "[004] Don't show"
            };
            public static string[] PtShowNameValues = new string[] {
                "[000] Show",
                "[001] Show",
                "[002] Show",
                "[003] Show",
                "[004] Don't show",
                "[128] Don't show",
                "[129] Show",
                "[130] Show",
                "[131] Show",
                "[132] Don't show",
                "[134] Show"
            };
        }
        public static class Weather {
            public static Dictionary<int, string> DPWeatherDict = new Dictionary<int, string> { 
                [00] = "Normal",
                [01] = "Normal, somewhat dark",
                [02] = "Rain",
                [03] = "Heavy rain",
                [04] = "Thunderstorm",
                [05] = "Snowfall, slow",
                [06] = "Diamond dust",
                [07] = "Blizzard",
                [08] = "Normal [08]",
                [09] = "Volcanic ash fall, slow",
                [10] = "Sand storm",
                [11] = "Hail",
                [12] = "Rocks ascending (?)",
                [13] = "Normal [13]",
                [14] = "Fog",
                [15] = "Deep fog",
                [16] = "Dark, Flash usable",
                [17] = "Lightning, no rain",
                [18] = "Normal [18]",
                [19] = "Normal [19]",
                [20] = "Normal [20]",
                [21] = "Diamond dust [21]",
                [22] = "Volcanic ash storm",
                [23] = "Normal [23]",
                [24] = "Thunderstorm [24]",
                [25] = "Normal [25]",
                [26] = "Diamond dust [26]",
                [27] = "Diamond dust [27]",
                [28] = "Snowfall, slow [28]",
            };
            public static Dictionary<int, string> PtWeatherDict = new Dictionary<int, string> {
                [00] = "Normal",
                [01] = "Normal, somewhat dark",
                [02] = "Rain",
                [03] = "Heavy rain",
                [04] = "Thunderstorm",
                [05] = "Snowfall, slow",
                [06] = "Diamond dust",
                [07] = "Blizzard",
                [08] = "Normal [08]",
                [09] = "Volcanic ash fall, slow",
                [10] = "Sand storm",
                [11] = "Hail",
                [12] = "Rocks ascending (?)",
                [13] = "Normal [13]",
                [14] = "Fog",
                [15] = "Deep fog",
                [16] = "Dark, Flash usable",
                [17] = "Lightning, no rain",
                [18] = "Light fog",
                [19] = "Heavy fog",
                [20] = "Normal [20]",
                [21] = "Diamond dust [21]",
                [22] = "Volcanic ash fall, steady",
                [23] = "Eterna forest weather",
                [24] = "Player spotlight [24]",
                [25] = "Player spotlight [25]",
                [26] = "Dark fog",
                [27] = "Somewhat green",
                [28] = "Somewhat red",
                [29] = "Somewhat blue",
                [30] = "Dim light",
                [31] = "Normal [31]",
                [32] = "Rain [32]",
                [33] = "Normal [33]",
                [34] = "Diamond dust [34]",
                [35] = "Diamond dust [35]",
                [36] = "Snowfall, slow [36]",
            };
            public static Dictionary<int, string> HGSSWeatherDict = new Dictionary<int, string> {
                [00] = "Normal",
                [01] = "Normal [1]",

                [02] = "Rain",
                [03] = "Rain [3]",
                [04] = "Rain [4]",
                [05] = "Rain [5]",
                [06] = "Rain [6]",
                [07] = "Rain [7]",
                [08] = "Rain [8]",

                [09] = "Snow [9]",
                [10] = "Snow [10]",
                [11] = "Snow [11]",
                [12] = "Snow [12]",
                [13] = "Snow [13]",
                [14] = "Sandstorm (in battle only)",
                [15] = "Snow [15]",

                [16] = "Diamond Dust",
                [17] = "Diamond Dust [17]",

                [18] = "Fog",
                [19] = "Fog [19]",
                [20] = "Fog [20]",
                [21] = "Fog [21]",

                [22] = "Darkness",
                [23] = "Darkness [23]",
                [24] = "Darkness after flash",
                [25] = "Darkness after flash [25]",

                [26] = "Low Light (Battle Arcade)"
            };
        }
        public static class CameraAngles {
            public static string[] DPPtCameraValues = new string[] {
                "[00] 3D Normal",
                "[01] 3D Top View (Higher than [12])",
                "[02] 3D Frontal Low (Wider than [15])",
                "[03] 3D Frontal",
                "[04] 2D Ortho",
                "[05] 3D Normal - Wide FOV",
                "[06] 3D Bird View",
                "[07] 3D Normal",
                "[08] 3D Bird View Far",
                "[09] 3D Frontal - Wide FOV",
                "[10] 3D Top View - Narrow",
                "[11] Normal 3D",
                "[12] 3D Top View",
                "[13] Frontal 3D",
                "[14] 3D Top View - Wide FOV",
                "[15] 3D Frontal Low"
            };
            public static string[] HGSSCameraValues = new string[] {
                "[00] 3D Top",
                "[01] 3D Front High",
                "[02] 3D Lower",
                "[03] 3D Frontal",
                "[04] 2D Top View",
                "[05] Normal 3D",
                "[06] 3D Normal",
                "[07] High 3D",
                "[08] 3D Top View",
                "[09] 3D Top View",
                "[10] 3D High Wide",
                "[11] 3D Frontal Wide",
                "[12] 3D Lower Close",
                "[13] 3D Full Frontal",
                "[14] 3D Top View",
                "[15] 2D Higher"
            };
        }
        public abstract class MusicDB {
            public static Dictionary<ushort, string> DPMusicDict = new Dictionary<ushort, string>() {
                [1000] = "Mystery Zone",
                [1001] = "Silence",
                [1002] = "Pal Park",
                [1004] = "Twinleaf Town (Day)",
                [1005] = "Sandgem Town (Day)",
                [1006] = "Floaroma Town (Day)",
                [1008] = "Route 225 (Day)",
                [1009] = "Valor Lakefront (Day)",
                [1010] = "Jubilife City (Day)",
                [1011] = "Canalave City (Day)",
                [1012] = "Oreburgh City (Day)",
                [1013] = "Eterna City (Day)",
                [1014] = "Hearthome City (Day)",
                [1015] = "Pastoria City (Day)",
                [1016] = "Veilstone City (Day)",
                [1017] = "Sunyshore City (Day)",
                [1018] = "Snowpoint City (Day)",
                [1019] = "Pokémon League (Day)",
                [1020] = "Fight Area (Day)",
                [1021] = "Route 201 (Day)",
                [1022] = "Route 203 (Day)",
                [1023] = "Route 205 (Day)",
                [1024] = "Route 206 (Day)",
                [1025] = "Route 209 (Day)",
                [1026] = "Route 215 (Day)",
                [1027] = "Route 216 (Day)",
                [1028] = "Route 228 (Day)",
                [1033] = "Twinleaf Town (Night)",
                [1034] = "Sandgem Town (Night)",
                [1035] = "Floaroma Town (Night)",
                [1037] = "Route 225 (Night)",
                [1038] = "Valor Lakefront (Night)",
                [1039] = "Jubilife City (Night)",
                [1040] = "Canalave City (Night)",
                [1041] = "Oreburgh City (Night)",
                [1042] = "Eterna City (Night)",
                [1043] = "Hearthome CIty (Night)",
                [1044] = "Pastoria City (Night)",
                [1045] = "Veilstone City (Night)",
                [1046] = "Sunyshore City (Night)",
                [1047] = "Snowpoint City (Night)",
                [1048] = "Pokémon League (Night)",
                [1049] = "Fight Area (Night)",
                [1050] = "Route 201 (Night)",
                [1051] = "Route 203 (Night)",
                [1052] = "Route 205 (Night)",
                [1053] = "Route 206 (Night)",
                [1054] = "Route 209 (Night)",
                [1055] = "Route 215 (Night)",
                [1056] = "Route 216 (Night)",
                [1057] = "Route 228 (Night)",
                [1060] = "Mystery Zone",
                [1062] = "Victory Road",
                [1063] = "Eterna Forest",
                [1064] = "Old Chateau",
                [1065] = "Cavern on the Lake",
                [1066] = "Amity Square",
                [1067] = "Team Galactic HQ",
                [1068] = "Eterna Galactic building",
                [1069] = "Great Marsh",
                [1070] = "Lake theme (Day)",
                [1071] = "Mt. Coronet",
                [1072] = "Spear Pillar",
                [1073] = "Stark Mountain (inside)",
                [1074] = "Cave 1",
                [1075] = "Cave 2",
                [1076] = "Elite 4 - Showdown",
                [1077] = "Hall of Fame",
                [1085] = "Pokémon Center (Day)",
                [1086] = "Pokémon Center (Night)",
                [1087] = "Gym theme",
                [1088] = "Rowan's Lab",
                [1089] = "Poffin House",
                [1090] = "Pokémon Mart",
                [1091] = "Game Corner",
                [1092] = "Battle Tower (inside)",
                [1093] = "Jubilife TV",
                [1094] = "Team Galactic Lab",
                [1096] = "Hall of Origin",
                [1097] = "GTS theme"
            };
            public static Dictionary<ushort, string> PtMusicDict = new Dictionary<ushort, string>() {
                [1000] = "Mystery Zone",
                [1001] = "Silence",
                [1002] = "Pal Park",
                [1004] = "Twinleaf Town (Day)",
                [1005] = "Sandgem Town (Day)",
                [1006] = "Floaroma Town (Day)",
                [1008] = "Route 225 (Day)",
                [1009] = "Valor Lakefront (Day)",
                [1010] = "Jubilife City (Day)",
                [1011] = "Canalave City (Day)",
                [1012] = "Oreburgh City (Day)",
                [1013] = "Eterna City (Day)",
                [1014] = "Hearthome City (Day)",
                [1015] = "Pastoria City (Day)",
                [1016] = "Veilstone City (Day)",
                [1017] = "Sunyshore City (Day)",
                [1018] = "Snowpoint City (Day)",
                [1019] = "Pokémon League (Day)",
                [1020] = "Fight Area (Day)",
                [1021] = "Route 201 (Day)",
                [1022] = "Route 203 (Day)",
                [1023] = "Route 205 (Day)",
                [1024] = "Route 206 (Day)",
                [1025] = "Route 209 (Day)",
                [1026] = "Route 215 (Day)",
                [1027] = "Route 216 (Day)",
                [1028] = "Route 228 (Day)",
                [1033] = "Twinleaf Town (Night)",
                [1034] = "Sandgem Town (Night)",
                [1035] = "Floaroma Town (Night)",
                [1037] = "Route 225 (Night)",
                [1038] = "Valor Lakefront (Night)",
                [1039] = "Jubilife City (Night)",
                [1040] = "Canalave City (Night)",
                [1041] = "Oreburgh City (Night)",
                [1042] = "Eterna City (Night)",
                [1043] = "Hearthome CIty (Night)",
                [1044] = "Pastoria City (Night)",
                [1045] = "Veilstone City (Night)",
                [1046] = "Sunyshore City (Night)",
                [1047] = "Snowpoint City (Night)",
                [1048] = "Pokémon League (Night)",
                [1049] = "Fight Area (Night)",
                [1050] = "Route 201 (Night)",
                [1051] = "Route 203 (Night)",
                [1052] = "Route 205 (Night)",
                [1053] = "Route 206 (Night)",
                [1054] = "Route 209 (Night)",
                [1055] = "Route 215 (Night)",
                [1056] = "Route 216 (Night)",
                [1057] = "Route 228 (Night)",
                [1060] = "Mystery Zone",
                [1062] = "Victory Road",
                [1063] = "Eterna Forest",
                [1064] = "Old Chateau",
                [1065] = "Cavern on the Lake",
                [1066] = "Amity Square",
                [1067] = "Team Galactic HQ",
                [1068] = "Galactic Eterna Building",
                [1069] = "Great Marsh",
                [1070] = "Lake theme (Day)",
                [1071] = "Mt. Coronet",
                [1072] = "Spear Pillar",
                [1073] = "Stark Mountain (in)",
                [1074] = "Cave 1",
                [1075] = "Cave 2",
                [1076] = "Elite 4 - Showdown",
                [1077] = "Hall of Fame",
                [1085] = "Pokémon Center (Day)",
                [1086] = "Pokémon Center (Night)",
                [1087] = "Gym theme",
                [1088] = "Rowan's Lab",
                [1089] = "Poffin House",
                [1090] = "Pokémon Mart",
                [1091] = "Game Corner",
                [1092] = "Battle Tower (inside)",
                [1093] = "Jubilife TV",
                [1094] = "Team Galactic Lab",
                [1096] = "Hall of Origin",
                [1097] = "GTS theme",
                [1190] = "Distortion World",
                [1191] = "Battle Arcade",
                [1192] = "Battle Hall",
                [1193] = "Battle Castle",
                [1194] = "Battle Factory",
                [1195] = "Battle Factory",
                [1196] = "Global Terminal"
            };
            public static Dictionary<ushort, string> HGSSMusicDict = new Dictionary<ushort, string>() {
                [1000] = "Mystery Zone",
                [1001] = "Silence [Outside]",
                [1002] = "Silence [Dungeon]",
                [1004] = "Opening Theme",
                [1008] = "Title Screen Theme",
                [1013] = "Bicycle Theme",
                [1018] = "New Bark Town",
                [1019] = "Cherrygrove City",
                [1020] = "Violet City",
                [1021] = "Azalea Town",
                [1022] = "Goldenrod City",
                [1023] = "Ecruteak City",
                [1024] = "Olivine City",
                [1025] = "Cianwood City",
                [1026] = "Mahogany Town",
                [1027] = "Blackthorn City",
                [1028] = "Route 29",
                [1029] = "Route 30/31",
                [1030] = "Route 32",
                [1031] = "Route 33",
                [1032] = "Route 34",
                [1033] = "Route 35/36/37",
                [1034] = "Route 40/41",
                [1035] = "Route 45/46",
                [1036] = "Route 38/39",
                [1037] = "Route 42/43/44",
                [1038] = "Vermillion City",
                [1039] = "Saffron City",
                [1040] = "Cerulean City",
                [1041] = "Lavender Town",
                [1042] = "Celadon City",
                [1043] = "Fuchsia City",
                [1044] = "Pewter City",
                [1045] = "Viridian City",
                [1046] = "Pallet Town",
                [1047] = "Cinnabar Island",
                [1050] = "Route 1",
                [1051] = "Route 2/22",
                [1052] = "Route 6",
                [1053] = "Route 4/5/9/10",
                [1054] = "Route 8/10",
                [1055] = "Route 7/16",
                [1056] = "Route 18/19/20",
                [1057] = "Route 3",
                [1058] = "Route 20/21",
                [1059] = "Route 11",
                [1060] = "Route 12/13/14/15",
                [1061] = "Route 24/25",
                [1062] = "Route 26/27",
                [1063] = "Pokémon Center",
                [1064] = "Pokémon Mart",
                [1065] = "Gym theme",
                [1066] = "Prof. Elm Lab",
                [1068] = "Kimono Girls Theater",
                [1069] = "Game Corner",
                [1070] = "Battle Frontier",
                [1071] = "Battle Tower",
                [1072] = "Sprout Tower",
                [1073] = "Ilex Forest",
                [1074] = "Ruins of Alph",
                [1075] = "National Park",
                [1076] = "Burned Tower",
                [1077] = "Bell Tower",
                [1078] = "Lighthouse",
                [1079] = "Team Rocket HQ",
                [1080] = "Ice Path",
                [1081] = "Dragon's Den",
                [1082] = "Diglett's Cave",
                [1083] = "Viridian Forest",
                [1084] = "Victory Road",
                [1085] = "Indigo Plateau",
                [1092] = "PokéAthlon Game",
                [1096] = "S.S. Aqua",
                [1097] = "Mt. Moon Plaza",
                [1099] = "Sleeping Radio Music",
                [1100] = "Pokemon March Radio",
                [1101] = "Unown Radio",
                [1102] = "Pokeflute Radio",
                [1103] = "Prof. Oak's Theme/Radio",
                [1134] = "Pokéathlon Dome (In)",
                [1141] = "Pokéathlon Dome (Out)",
                [1143] = "Battle Factory",
                [1144] = "Battle Hall",
                [1145] = "Battle Arcade",
                [1146] = "Battle Castle",
                [1151] = "Wi-Fi Union Room",
                [1153] = "WiFi Plaza Parade",
                [1154] = "GTS Terminal",
                [1155] = "Spin Trade Theme",
                [1157] = "Route 47/48",
                [1158] = "Safari Zone Gate",
                [1159] = "Pal Park",
                [1160] = "Ethan's Theme",
                [1161] = "Lyra's Theme",
                [1163] = "Kimono Girls Ritual",
                [1164] = "Kimono Girls Theme",
                [1165] = "Battle! Ho-Oh!",
                [1166] = "Battle! Lugia",
                [1166] = "Spiky-Eared Pichu",
                [1168] = "Sinjoh Ruins",
                [1169] = "Route 101 Radio",
                [1170] = "Route 201 Radio",
                [1171] = "Gym Theme [Radio]",
                [1172] = "Azalea Town [Radio]",
                [1172] = "Goldenrod City [Radio]",
                [1173] = "Battle! Kyogre/Groudon",
                [1175] = "PokéWalker Theme",
                [1176] = "Battle! Arceus (Event)",
                [1216] = "Route 17"
            };
        }
        public static class EventEditor {
            public static class Spawnables {
                public static string[] orientationsArray = new string[] {
                    "Frontal Interaction",
                    "Activated from the left",
                    "Activated from the right",
                    "Activated from behind",
                    "Activated from any dir",
                    "Activated from the sides",
                    "Front/Back Interaction",
                };
           
                public static string[] typesArray = new string[] {
                    "Misc",
                    "Board (Front Auto-Trigger)",
                    "Hidden Item",
                };
            }
            public static class Overworlds {
                public static string[] movementsArray = new string[] {
                    "[00]  None",
                    "[01]  None",
                    "[02]  Looking in all directions",
                    "[03]  Walking around in all directions",
                    "[04]  Walking Up, Down",
                    "[05]  Walking Left, Right",
                    "[06]  Looking Up, Left",
                    "[07]  Looking Up, Right",
                    "[08]  Looking Down, Left",
                    "[09]  Looking Down, Right",
                    "[10]  Looking Up, Down, Left",
                    "[11]  Looking Up, Right, Down",
                    "[12]  Looking Right, Left, Up",
                    "[13]  Looking Right, Left, Down",
                    "[14]  Facing Up",
                    "[15]  Facing Down",
                    "[16]  Facing Left",
                    "[17]  Facing Right",
                    "[18]  Counterclockwise spinning",
                    "[19]  Clockwise spinning",
                    "[20]  Running Up, Down",
                    "[21]  L Run (Up, Right)",
                    "[22]  Patrols, then stops (might crash)",
                    "[23]  Patrols, then stops (might crash)",
                    "[24]  L Run (Up, Right)",
                    "[25]  Patrols, then stops (might crash)",
                    "[26]  Patrols, then stops (might crash)",
                    "[27]  Patrols, then stops",
                    "[28]  L run (Right, Down)",
                    "[29]  L run (Left, Up)",
                    "[30]  Continuous patrolling (might crash)",
                    "[31]  Continuous patrolling (might crash)",
                    "[32]  L Run (Down, Right)",
                    "[33]  L Run (Right, Up)",
                    "[34]  Patrols Area, then stops",
                    "[35]  Patrols Area, then stops",
                    "[36]  L Run (Down, Left)",
                    "[37]  Running Up, Left, Down, Right",
                    "[38]  Running Down, Right, Up, Left",
                    "[39]  Running Left, Down, Right, Up",
                    "[40]  Running Right, Up, Left, Down",
                    "[41]  Running Up, Right, Down, Left",
                    "[42]  Running Down, Left, Up, Right",
                    "[43]  Running Left, Up, Right, Down",
                    "[44]  Running Right, Down, Left, Up",
                    "[45]  Looking Up, Down",
                    "[46]  Looking Right, Left",
                    "[47]  Crashes game (?)",
                    "[48]  Follow Hero",
                    "[49]  Semi-circle spin (Down, Right, Up)",
                    "[50]  Looking down",
                    "[51]  Hidden Under Snow",
                    "[52]  Hidden Under Snow",
                    "[53]  Hidden Underground",
                    "[54]  Hidden Under Grass",
                    "[55]  Follow Hero",
                    "[56]  Disappears",
                    "[57]  Looking Left",
                    "[58]  Looking Right",
                    "[59]  Mimick's Player facing direction",
                    "[60]  Mimick's Player facing direction",
                    "[61]  Mimick's Player facing direction",
                    "[62]  Mimick's Player facing direction",
                    "[63]  Apparently nothing (?)",
                    "[64]  Apparently nothing (?)",
                    "[65]  Apparently nothing (?)",
                    "[66]  Apparently nothing (?)",
                    "[67]  Walking Right, Left",
                    "[68]  Looking Right",
                    "[69]  Apparently nothing (?)",
                    "[70]  Apparently nothing (?)",
                    "[71]  Looking Left"
                };
            }
        }
        public static class ScriptEditor {
            public static Dictionary<ushort, string> movementsDictIDName = new Dictionary<ushort, string>() {
                [0x0000] = "LookUp",
                [0x0001] = "LookDown",
                [0x0002] = "LookLeft",
                [0x0003] = "LookRight",
                [0x0004] = "WalkUpSlow",
                [0x0005] = "WalkDownSlow",
                [0x0006] = "WalkLeftSlow",
                [0x0007] = "WalkRightSlow",
                [0x0008] = "WalkUp",
                [0x0009] = "WalkDown",
                [0x000A] = "WalkLeft",
                [0x000B] = "WalkRight",
                [0x000C] = "WalkUpFast",
                [0x000D] = "WalkDownFast",
                [0x000E] = "WalkLeftFast",
                [0x000F] = "WalkRightFast",
                [0x0010] = "WalkUpVeryFast",
                [0x0011] = "WalkDownVeryFast",
                [0x0012] = "WalkLeftVeryFast",
                [0x0013] = "WalkRightVeryFast",
                [0x0014] = "RunUp",
                [0x0015] = "RunDown",
                [0x0016] = "RunLeft",
                [0x0017] = "RunRight",
                [0x0018] = "WalkUpSlowSite",
                [0x0019] = "WalkDownSlowSite",
                [0x001A] = "WalkLeftSlowSite",
                [0x001B] = "WalkRightSlowSite",
                [0x001C] = "WalkUpSite",
                [0x001D] = "WalkDownSite",
                [0x001E] = "WalkLeftSite",
                [0x001F] = "WalkRightSite",
                [0x0020] = "WalkUpFastSite",
                [0x0021] = "WalkDownFastSite",
                [0x0022] = "WalkLeftFastSite",
                [0x0023] = "WalkRightFastSite",
                [0x0024] = "WalkUpVeryFastSite",
                [0x0025] = "WalkDownVeryFastSite",
                [0x0026] = "WalkLeftVeryFastSite",
                [0x0027] = "WalkRightVeryFastSite",
                [0x0028] = "RunUpSite",
                [0x0029] = "RunDownSite",
                [0x002A] = "RunLeftSite",
                [0x002B] = "RunRightSite",
                [0x002C] = "JumpUpSlow",
                [0x002D] = "JumpDownSlow",
                [0x002E] = "JumpLeftSlow",
                [0x002F] = "JumpRightSlow",
                [0x0030] = "JumpUpSite",
                [0x0031] = "JumpDownSite",
                [0x0032] = "JumpLeftSite",
                [0x0033] = "JumpRightSite",
                [0x0034] = "JumpUp",
                [0x0035] = "JumpDown",
                [0x0036] = "JumpLeft",
                [0x0037] = "JumpRight",
                [0x0038] = "JumpUp2",
                [0x0039] = "JumpDown2",
                [0x003A] = "JumpLeft2",
                [0x003B] = "JumpRight2",
                [0x0045] = "WaitDisappear",
                [0x0047] = "LockDir",
                [0x0048] = "ReleaseDir",
                [0x004B] = "Exclamation",
                [0x004C] = "WaitWalkUpSlow",
                [0x004D] = "WaitWalkDownSlow",
                [0x004E] = "WaitWalkLeftSlow",//Seems to make the player run in HGSS?
                [0x004F] = "WaitWalkRightSlow",
                [0x0050] = "WaitWalkUp",
                [0x0051] = "WaitWalkDown",
                [0x0052] = "WaitWalkLeft",
                [0x0053] = "WaitWalkRight",
                [0x0054] = "WaitMoveUp",
                [0x0055] = "WaitMoveDown",
                [0x0056] = "WaitMoveLeft",
                [0x0057] = "WaitMoveRight",
                [0x0058] = "WaitWalkBackUp",
                [0x0059] = "WaitWalkBackDown",
                [0x005A] = "WaitWalkBackLeft",
                [0x005B] = "WaitWalkBackRight",
                [0x005C] = "WaitJumpLeft1",
                [0x005D] = "WaitJumpRight1",
                [0x005E] = "WaitJumpLeft2",
                [0x005F] = "WaitJumpRight2",
                [0x0064] = "WaitMoveSite",
                [0x0065] = "WaitJumpSite",
                [0x0067] = "WaitDoubleExclamation",
                [0x0068] = "WaitMoveForever",
                [0x00FE] = "End"
            };
            public static Dictionary<ushort, string> comparisonOperatorsDict = new Dictionary<ushort, string>() {
                [0] = "LESS",
                [1] = "EQUAL",
                [2] = "GREATER",
                [3] = "LESS/EQUAL",
                [4] = "GREATER/EQUAL",
                [5] = "DIFFERENT",
                [6] = "OR",
                [7] = "AND",
                [0xFF] = "TRUEUP"
            };

            public static Dictionary<ushort, int> commandsWithRelativeJump = new Dictionary<ushort, int>() {
                //commandID, ID of parameter With Jump Address

                [0x0016] = 0,  //Jump
                [0x001A] = 0,  //Call
                [0x001C] = 1,  //Jump-If
                [0x001D] = 1, //Call-If
                [0x005E] = 1, //Movement
            };
            public static ushort[] endCodes = new ushort[] { 
                0x2, 
                0x16, 
                0x1B 
            };

            public static Dictionary<ushort, string> DPPtScrCmdNames = new Dictionary<ushort, string>() {
                [0x0000] = "Nop",
                [0x0001] = "Dummy",
                [0x0002] = "End",
                [0x0003] = "WaitTime",
                [0x0004] = "RegValueSet",
                [0x0005] = "RegDataSet",
                [0x0006] = "RegAdrsSet",
                [0x0007] = "AdrsValueSet",
                [0x0008] = "AdrsRegSet",
                [0x0009] = "RegRegSet",
                [0x000A] = "AdrsAdrsSet",
                [0x000B] = "IfRegReg",
                [0x000C] = "IfRegValue",
                [0x000D] = "IfRegAdrs",
                [0x000E] = "IfAdrsReg",
                [0x000F] = "IfAdrsValue",
                [0x0010] = "IfAdrsAdrs",
                [0x0011] = "CompareVarValue",
                [0x0012] = "CompareVars",

                [0x0014] = "CommonScript",
                [0x0015] = "LocalScript",
                [0x0016] = "Jump",
                [0x0017] = "JumpIfObjID",
                [0x0018] = "JumpIfBgID",
                [0x0019] = "JumpIfPlayerDir",
                [0x001A] = "Call",
                [0x001B] = "Return",
                [0x001C] = "Jump-If",
                [0x001D] = "Call-If",
                [0x001E] = "SetFlag",
                [0x001F] = "ClearFlag",
                [0x0020] = "CheckFlag",
                [0x0021] = "CheckFlagToVar",
                [0x0022] = "SetFlagFromVar",
                [0x0023] = "SetTrainerFlag",
                [0x0024] = "ClearTrainerFlag",
                [0x0025] = "CheckTrainerFlag",
                [0x0026] = "IncrementVar",
                [0x0027] = "DecrementVar",
                [0x0028] = "SetVar",
                [0x0029] = "SetVarFromVariable",
                [0x002A] = "SetVarFromFlexible",
                [0x002B] = "MessageAll",
                [0x002C] = "Message",
                [0x002D] = "MessageFlex",
                [0x002E] = "MessageNoSkip",

                [0x0030] = "WaitAB",
                [0x0031] = "WaitButton",

                [0x0033] = "OpenMessage",
                [0x0034] = "CloseMessage",
                [0x0035] = "FreezeMessage",
                [0x0036] = "MakeBoard",
                [0x0037] = "BoardInfo",
                [0x0038] = "ShowBoard",
                [0x0039] = "WaitBoard",
                [0x003A] = "BoardMessage",
                [0x003B] = "EndBoard",
                [0x003C] = "Menu",

                [0x003E] = "YesNoBox",
                [0x003F] = "DummyGuinnessBox",
                [0x0040] = "MultiStandardText",
                [0x0041] = "MultiLocalText",
                [0x0042] = "AddMultiOption",
                [0x0043] = "ShowMulti",
                [0x0044] = "Multi3",
                [0x0045] = "ListStandardText",
                [0x0046] = "TextMessageScriptMulti",
                [0x0047] = "ShowList",
                [0x0048] = "MultiColumn",
                [0x0049] = "PlayFanfare",
                [0x004A] = "StopFanfare",
                [0x004B] = "WaitFanfare",
                [0x004C] = "PlayCry",
                [0x004D] = "WaitCry",
                [0x004E] = "PlaySound",
                [0x004F] = "WaitSound",
                [0x0050] = "PlayMusic",
                [0x0051] = "StopMusic",
                [0x0052] = "PlayDefaultMusic",
                [0x0053] = "SetMusic",
                [0x0054] = "FadeOutMusic",
                [0x0055] = "FadeInMusic",

                [0x0059] = "CheckChatotCry",
                [0x005A] = "StartChatotCry",
                [0x005B] = "StopChatotCry",
                [0x005C] = "SaveChatotCry",

                [0x005E] = "Movement",
                [0x005F] = "WaitMovement",
                [0x0060] = "LockAll",
                [0x0061] = "ReleaseAll",
                [0x0062] = "Lock",
                [0x0063] = "Release",
                [0x0064] = "AddOW",
                [0x0065] = "RemoveOW",
                [0x0066] = "LockCam",
                [0x0067] = "ReleaseCam",
                [0x0068] = "FacePlayer",
                [0x0069] = "CheckPlayerPosition",
                [0x006A] = "CheckOverworldPosition",

                [0x006C] = "KeepOverworld",
                [0x006D] = "SetOverworldMovement",
                [0x006E] = "SetFollowingOverworld",
                [0x006F] = "GiveMoney",
                [0x0070] = "TakeMoney",
                [0x0071] = "CompareMoney",
                [0x0072] = "ShowMoney",
                [0x0073] = "HideMoney",
                [0x0074] = "UpdateMoney",
                [0x0075] = "ShowCoins",
                [0x0076] = "HideCoins",
                [0x0077] = "UpdateCoins",
                [0x0078] = "CheckCoins",
                [0x0079] = "GiveCoins",
                [0x007A] = "TakeCoins",
                [0x007B] = "GiveItem",
                [0x007C] = "TakeItem",
                [0x007D] = "CheckItemSpace",
                [0x007E] = "CheckPlayerHasItem",
                [0x007F] = "CheckItemIsMachine",
                [0x0080] = "GetItemPocket",
                [0x0081] = "DummyGivePCItem",
                [0x0082] = "DummyCheckPCItem",
                [0x0083] = "GiveGoods",
                [0x0084] = "DummyTakeGoods",
                [0x0085] = "CheckGoodsSpace",
                [0x0086] = "DummyCheckGoods",
                [0x0087] = "GiveTrap",
                [0x0088] = "DummyTakeTrap",
                [0x0089] = "DummyCheckTrapSpace",
                [0x008A] = "DummyCheckTrap",
                [0x008B] = "DummyGiveTreasure",
                [0x008C] = "DummyTakeTreasure",
                [0x008D] = "DummyCheckTreasureSpace",
                [0x008E] = "DummyCheckTreasure",
                [0x008F] = "GiveSphere",
                [0x0090] = "DummyTakeSphere",
                [0x0091] = "DummyCheckSphereSpace",
                [0x0092] = "DummyCheckSphere",
                [0x0093] = "CheckSealAmount",
                [0x0094] = "GiveSeal",
                [0x0095] = "CheckPokemonForm",
                [0x0096] = "GivePokemon",
                [0x0097] = "GivePokemonEgg",
                [0x0098] = "ReplaceMove",
                [0x0099] = "CheckMove",
                [0x009A] = "CheckMoveInParty",

                [0x009C] = "DummySetWeather",
                [0x009D] = "DummyInitWeather",
                [0x009E] = "DummyUpdateWeather",
                [0x009F] = "DummyCheckMapPosition",
                [0x00A0] = "DummyCountPartyPokemon",
                [0x00A1] = "ReturnScreen",

                [0x00A9] = "SealCapsuleScreen",
                [0x00AA] = "WorldMapScreen",
                [0x00AB] = "PCBoxScreen",
                [0x00AC] = "DrawUnion",
                [0x00AD] = "TrainerCaseUnion",
                [0x00AE] = "TradeUnion",
                [0x00AF] = "RecordMixingUnion",

                [0x00B3] = "WFC1",
                [0x00B4] = "ChooseStarterScreen",
                [0x00B5] = "EndChooseStarterScreen",

                [0x00BA] = "ChoosePlayerName",
                [0x00BB] = "ChoosePokémonName",
                [0x00BC] = "FadeScreen",
                [0x00BD] = "WaitFadeScreen",
                [0x00BE] = "Warp",
                [0x00BF] = "RockClimbAnimation",
                [0x00C0] = "SurfAnimation",
                [0x00C1] = "WaterfallAnimation",
                [0x00C2] = "FlyAnimation",
                [0x00C3] = "FlashAnimation",
                [0x00C4] = "DefogAnimation",
                [0x00C5] = "CutAnimation",
                [0x00C6] = "Tuxedo",
                [0x00C7] = "CheckBike",
                [0x00C8] = "RideBike",
                [0x00C9] = "CyclingRoad",
                [0x00CA] = "CheckPlayerAction",
                [0x00CB] = "SetPlayerAction",
                [0x00CC] = "UpdatePlayerAction",
                [0x00CD] = "TextPlayerName",
                [0x00CE] = "TextRival",
                [0x00CF] = "TextCounterpart",
                [0x00D0] = "TextPokemon",
                [0x00D1] = "TextItem",
                [0x00D2] = "TextPocket",
                [0x00D3] = "TextMachineAttack",
                [0x00D4] = "TextMove",
                [0x00D5] = "TextNumber",
                [0x00D6] = "TextNickname",
                [0x00D7] = "TextPoketch",
                [0x00D8] = "TextTrainer",
                [0x00D9] = "TextPlayerTrainerType",
                [0x00DA] = "TextPokemonStored",
                [0x00DB] = "TextStarterPokemon",
                [0x00DC] = "TextRivalStarter",
                [0x00DD] = "TextCounterpartStarter",
                [0x00DE] = "CheckStarter",
                [0x00DF] = "TextGoods",
                [0x00E0] = "TextTrap",
                [0x00E1] = "TextTreasure",
                [0x00E2] = "TextMapName",
                [0x00E3] = "GenerateSwarm",
                [0x00E4] = "TrainerID",
                [0x00E5] = "TrainerBattle",
                [0x00E6] = "TrainerMessage",
                [0x00E7] = "TrainerMsgCheck",
                [0x00E8] = "TrainerRematchMsgCheck",
                [0x00E9] = "TrainerTypeCheck",
                [0x00EA] = "TrainerMusic",
                [0x00EB] = "LostBattle",
                [0x00EC] = "CheckBattleIsLost",
                [0x00ED] = "CheckDefeatedPokemon",
                [0x00EE] = "Check2vs2",
                [0x00EF] = "DummyTrainerBattle",
                [0x00F0] = "DummyTrainerFlag",
                [0x00F1] = "DummyTrainerFlagJump",

                [0x00F7] = "PokémonContest",

                [0x0111] = "FlashContest",
                [0x0112] = "EndFlash",
                [0x0116] = "ShowLinkCountRecord",
                [0x0119] = "CheckPokerus",
                [0x011A] = "CheckPokemonGender",
               
                [0x011C] = "CheckElevatorFloor",
                [0x011D] = "ElevatorBox",
                [0x011E] = "SinnohDexSeen",
                [0x011F] = "SinnohDexObtained",
                [0x0120] = "NationalDexSeen",
                [0x0121] = "NationalDexObtained",
                [0x0122] = "DummyNationalDexCheck",
                [0x0123] = "PokedexProgressMsg",
                [0x0124] = "WildBattle",
                [0x0125] = "FirstBattle",
                [0x0126] = "CatchTutorial",
                [0x0127] = "UpdateHoneyTree",
                [0x0128] = "CheckHoneyTree",
                [0x0129] = "HoneyTreeBattle",
                [0x012A] = "StopHoneyTreeAnimation",
                [0x012C] = "CheckSaveGame",
                [0x012D] = "SaveGame",

                [0x0131] = "GivePokétch",
                [0x0132] = "PoketchFlag",
                [0x0133] = "GivePoketchApp",
                [0x0134] = "CheckPoketchApp",

                [0x014B] = "DummyLostBattle",
                [0x014C] = "SetLastWarp",
                [0x014D] = "CheckPlayerGender",
                [0x014E] = "HealPokemon",
                [0x0153] = "UnionRoom",
                [0x0157] = "CheckPokedex",
                [0x0158] = "GivePokedex",
                [0x0159] = "CheckShoes",
                [0x015A] = "GiveShoes",
                [0x015B] = "CheckBadge",
                [0x015C] = "EnableBadge",
                [0x015D] = "DisableBadge",
                [0x015E] = "SetPlayerAction",
                [0x015F] = "GiveBag",
                [0x0160] = "CheckPartner",
                [0x0161] = "SetPartner",
                [0x0162] = "ClearPartner",

                [0x0166] = "CheckGameIsCompleted",
                [0x0167] = "GameCompleted",
                [0x0168] = "DoorAnimation",
                [0x0169] = "WaitDoor",
                [0x016A] = "FreeDoor",
                [0x016B] = "OpenDoor",
                [0x016C] = "CloseDoor",
                [0x016D] = "GetDaycareNames",
                [0x016E] = "GetDaycareStatus",
                [0x016F] = "InitPastoriaGym",
                [0x0170] = "PastoriaGymButton",
                [0x0171] = "InitHearthomeGym",
                [0x0172] = "HearthomeGymLift",
                [0x0173] = "InitCanalaveGym",
                [0x0174] = "InitVeilstoneGym",
                [0x0175] = "InitSunyshoreGym",
                [0x0176] = "SunyshoreGymGear",
                [0x0177] = "GetPartyCount",

                [0x0186] = "SetOverworldPosition",
                [0x0187] = "SetOverworldFullPosition",
                [0x0188] = "SetOverworldMovement",
                [0x0189] = "SetOverworldDirection",

                [0x01AC] = "EggHatchScreen",
                [0x01AD] = "DummyDaycare",
                [0x01AE] = "CheckDaycareLevel",

                [0x01B1] = "UnvanishOverworld",
                [0x01B2] = "VanishOverworld",
                [0x01B3] = "OpenMailScreen",
                [0x01B4] = "GetMailCount",

                [0x01B5] = "RecordList",
                [0x01B6] = "CheckTimePeriod",
                [0x01B7] = "GetRandom",
                [0x01B8] = "DummyGetRandom",
                [0x01B9] = "GetPokemonHappiness",
                [0x01BA] = "AddHappiness",
                [0x01BB] = "SubHappiness",

                [0x01BD] = "CheckPlayerDir",

                [0x01C8] = "CheckMoveCount",
                [0x01C9] = "DeleteMove",

                [0x01D7] = "BerryPoffin",
                [0x01D9] = "BattleRoomResult",

                [0x01E8] = "CheckSinnohPokédex",
                [0x01E9] = "CheckNationalPokédex",
                [0x01EA] = "ShowSinnohSheet",
                [0x01EB] = "ShowNationalSheet",

                [0x01F1] = "GetFossilCount",
                [0x01F4] = "GetPokeNameFromFossil",
                [0x01F5] = "CheckFossil",
                [0x01F6] = "CountPokemonUnderLevel",
                [0x01F7] = "SurvivePoison",

                [0x0200] = "GetPreviousHeader",
                [0x0201] = "GetCurrentHeader",
                
                [0x0205] = "Geonet",
                
                [0x0208] = "ShowPokemonPicture",
                [0x0209] = "HidePokemonPicture",

                [0x020D] = "SpearPillarSequence",
                
                [0x021C] = "AddRoamingPokemon",
                [0x021D] = "Group",
                [0x0221] = "RememberMove",
                [0x0224] = "TeachMove",
                [0x0225] = "CheckTeachMove",
                [0x0228] = "CheckPokémonTrade",
                [0x0229] = "TradePokemon",
                [0x022A] = "EndTrade",

                [0x022E] = "PokemonRibbonCount",
                [0x022F] = "PartyRibbonCount",
                [0x0230] = "CheckRibbon",
                [0x0231] = "GiveRibbon",
                [0x0232] = "TextRibbon",
                [0x0233] = "CountPokemonEVs",
                [0x0234] = "GetDayOfWeek",
                [0x0239] = "RulesList",
                [0x023B] = "PCHealAnimation",
                [0x023C] = "ElevatorAnimation",
                [0x023D] = "ShipAnimation",
                [0x023E] = "MysteryGiftGive",
                
                [0x0246] = "CheckVersion",
                [0x0247] = "GetFirstPokemon",
                
                [0x0252] = "CountPCFreeSpace",
                
                [0x0261] = "TextAccesory",
                [0x0262] = "CheckPokemonInParty",
                [0x0263] = "SetDeoxysForm",
                //0x0264 is different between DP/Plat

                [0x0267] = "SlotMachine",
                [0x0268] = "GetHour",
                [0x0269] = "OverworldShake",
                [0x026A] = "OverworldBlink",
                [0x026B] = "CheckRegis",

                [0x026D] = "MessageUnown",
                [0x026E] = "CheckGBACartidge",
                [0x026F] = "ResetSpiritombCounter",
                
                [0x0283] = "MusicVolumeSet",

                [0x029F] = "ShakeCamera",

                [0x02C3] = "ScopeMode"
            };
            public static Dictionary<ushort, byte[]> DPPtScrCmdParameters = new Dictionary<ushort, byte[]>() {
                [0x0000] = new byte[1] { 0 },
                [0x0001] = new byte[1] { 0 },
                [0x0002] = new byte[1] { 0 },
                [0x0003] = new byte[] { 2, 2 },
                [0x0004] = new byte[] { 1, 1 },
                [0x0005] = new byte[] { 1, 4 },
                [0x0006] = new byte[] { 1, 4 },
                [0x0007] = new byte[] { 4, 1 },
                [0x0008] = new byte[] { 4, 1 },
                [0x0009] = new byte[] { 1, 1 },
                [0x000A] = new byte[] { 4, 4 },
                [0x000B] = new byte[] { 1, 1 },
                [0x000C] = new byte[] { 1, 1 },
                [0x000D] = new byte[] { 1, 4 },
                [0x000E] = new byte[] { 4, 1 },
                [0x000F] = new byte[] { 4, 1 },
                [0x0010] = new byte[] { 4, 4 },
                [0x0011] = new byte[] { 2, 2 },
                [0x0012] = new byte[] { 2, 2 },
                [0x0013] = new byte[] { 2 },
                [0x0014] = new byte[] { 2 },
                [0x0015] = new byte[1] { 0 },
                [0x0016] = new byte[] { 4 },
                [0x0017] = new byte[] { 1, 4 },
                [0x0018] = new byte[] { 1, 4 },
                [0x0019] = new byte[] { 1, 4 },
                [0x001A] = new byte[] { 4 },
                [0x001B] = new byte[1] { 0 },
                [0x001C] = new byte[] { 1, 4 },
                [0x001D] = new byte[] { 1, 4 },
                [0x001E] = new byte[] { 2 },
                [0x001F] = new byte[] { 2 },
                [0x0020] = new byte[] { 2 },
                [0x0021] = new byte[] { 2, 2 },
                [0x0022] = new byte[] { 2 },
                [0x0023] = new byte[] { 2 },
                [0x0024] = new byte[] { 2 },
                [0x0025] = new byte[] { 2 },
                [0x0026] = new byte[] { 2, 2 },
                [0x0027] = new byte[] { 2, 2 },
                [0x0028] = new byte[] { 2, 2 },
                [0x0029] = new byte[] { 2, 2 },
                [0x002A] = new byte[] { 2, 2 },
                [0x002B] = new byte[] { 1 },
                [0x002C] = new byte[] { 1 },
                [0x002D] = new byte[] { 2 },
                [0x002E] = new byte[] { 2 },
                [0x002F] = new byte[] { 1 },
                [0x0030] = new byte[1] { 0 },
                [0x0031] = new byte[1] { 0 },
                [0x0032] = new byte[1] { 0 },
                [0x0033] = new byte[1] { 0 },
                [0x0034] = new byte[1] { 0 },
                [0x0035] = new byte[1] { 0 },
                [0x0036] = new byte[] { 1, 1, 2, 2 },
                [0x0037] = new byte[] { 1, 2 },
                [0x0038] = new byte[] { 1 },
                [0x0039] = new byte[1] { 0 },
                [0x003A] = new byte[] { 1, 2 },
                [0x003B] = new byte[] { 2 },
                [0x003C] = new byte[1] { 0 },
                [0x003D] = new byte[] { 1, 1, 1, 1, 1, 1 },
                [0x003E] = new byte[] { 2 },
                [0x003F] = new byte[1] { 0 },
                [0x0040] = new byte[] { 1, 1, 1, 1, 2 },
                [0x0041] = new byte[] { 1, 1, 1, 1, 2 },
                [0x0042] = new byte[] { 1, 1 },
                [0x0043] = new byte[1] { 0 },
                [0x0044] = new byte[] { 1, 1, 1, 1, 2 },
                [0x0045] = new byte[] { 1, 1, 1, 1, 2 },
                [0x0046] = new byte[] { 2, 2, 2 },
                [0x0047] = new byte[1] { 0 },
                [0x0048] = new byte[] { 1 },
                [0x0049] = new byte[] { 2 },
                [0x004A] = new byte[] { 2 },
                [0x004B] = new byte[] { 2 },
                [0x004C] = new byte[] { 2, 2 },
                [0x004D] = new byte[1] { 0 },
                [0x004E] = new byte[] { 2 },
                [0x004F] = new byte[1] { 0 },
                [0x0050] = new byte[] { 2 },
                [0x0051] = new byte[] { 2 },
                [0x0052] = new byte[1] { 0 },
                [0x0053] = new byte[] { 2 },
                [0x0054] = new byte[] { 2, 2 },
                [0x0055] = new byte[] { 2 },
                [0x0056] = new byte[] { 1, 1 },
                [0x0057] = new byte[] { 2 },
                [0x0058] = new byte[] { 1 },
                [0x0059] = new byte[] { 2 },
                [0x005A] = new byte[] { 2 },
                [0x005B] = new byte[1] { 0 },
                [0x005C] = new byte[1] { 0 },
                [0x005D] = new byte[1] { 0 },
                [0x005E] = new byte[] { 2, 4 },
                [0x005F] = new byte[1] { 0 },
                [0x0060] = new byte[1] { 0 },
                [0x0061] = new byte[1] { 0 },
                [0x0062] = new byte[] { 2 },
                [0x0063] = new byte[] { 2 },
                [0x0064] = new byte[] { 2 },
                [0x0065] = new byte[] { 2 },
                [0x0066] = new byte[] { 2, 2 },
                [0x0067] = new byte[1] { 0 },
                [0x0068] = new byte[1] { 0 },
                [0x0069] = new byte[] { 2, 2 },
                [0x006A] = new byte[] { 2, 2, 2 },
                [0x006B] = new byte[] { 2, 2, 2 },
                [0x006C] = new byte[] { 2, 1 },
                [0x006D] = new byte[] { 2, 2 },
                [0x006E] = new byte[1] { 0 },
                [0x006F] = new byte[] { 4 },
                [0x0070] = new byte[] { 4 },
                [0x0071] = new byte[] { 2, 4 },
                [0x0072] = new byte[] { 2, 2 },
                [0x0073] = new byte[1] { 0 },
                [0x0074] = new byte[1] { 0 },
                [0x0075] = new byte[] { 2, 2 },
                [0x0076] = new byte[1] { 0 },
                [0x0077] = new byte[1] { 0 },
                [0x0078] = new byte[] { 2, 2, 2 },
                [0x0079] = new byte[] { 2 },
                [0x007A] = new byte[] { 2, 2, 2 },
                [0x007B] = new byte[] { 2, 2, 2 },
                [0x007C] = new byte[] { 2, 2, 2 },
                [0x007D] = new byte[] { 2, 2, 2 },
                [0x007E] = new byte[] { 2, 2, 2 },
                [0x007F] = new byte[] { 2, 2 },
                [0x0080] = new byte[] { 2, 2 },
                [0x0081] = new byte[1] { 0 },
                [0x0082] = new byte[1] { 0 },
                [0x0083] = new byte[] { 2, 2, 2 },
                [0x0084] = new byte[1] { 0 },
                [0x0085] = new byte[] { 2, 2, 2 },
                [0x0086] = new byte[1] { 0 },
                [0x0087] = new byte[] { 2, 2, 2 },
                [0x0088] = new byte[1] { 0 },
                [0x0089] = new byte[1] { 0 },
                [0x008A] = new byte[1] { 0 },
                [0x008B] = new byte[1] { 0 },
                [0x008C] = new byte[1] { 0 },
                [0x008D] = new byte[1] { 0 },
                [0x008E] = new byte[1] { 0 },
                [0x008F] = new byte[] { 2, 2, 2 },
                [0x0090] = new byte[1] { 0 },
                [0x0091] = new byte[1] { 0 },
                [0x0092] = new byte[1] { 0 },
                [0x0093] = new byte[] { 2, 2 },
                [0x0094] = new byte[] { 2, 2 },
                [0x0095] = new byte[] { 2, 2 },
                [0x0096] = new byte[] { 2, 2, 2, 2 },
                [0x0097] = new byte[] { 2, 2 },
                [0x0098] = new byte[1] { 0 },
                [0x0099] = new byte[] { 2, 2, 2 },
                [0x009A] = new byte[] { 2, 2 },
                [0x009B] = new byte[] { 2, 2 },
                [0x009C] = new byte[1] { 0 },
                [0x009D] = new byte[1] { 0 },
                [0x009E] = new byte[1] { 0 },
                [0x009F] = new byte[1] { 0 },
                [0x00A0] = new byte[1] { 0 },
                [0x00A1] = new byte[1] { 0 },
                [0x00A2] = new byte[1] { 0 },
                [0x00A3] = new byte[1] { 0 },
                [0x00A4] = new byte[1] { 0 },
                [0x00A5] = new byte[1] { 0 },
                [0x00A6] = new byte[] { 2, 2, 2 },
                [0x00A7] = new byte[] { 2, 2 },
                [0x00A8] = new byte[] { 2, 2 },
                [0x00A9] = new byte[1] { 0 },
                [0x00AA] = new byte[1] { 0 },
                [0x00AB] = new byte[] { 1 },
                [0x00AC] = new byte[1] { 0 },
                [0x00AD] = new byte[1] { 0 },
                [0x00AE] = new byte[1] { 0 },
                [0x00AF] = new byte[1] { 0 },
                [0x00B0] = new byte[1] { 0 },
                [0x00B1] = new byte[1] { 0 },
                [0x00B2] = new byte[] { 2, 2 },
                [0x00B3] = new byte[] { 2 },
                [0x00B4] = new byte[1] { 0 },
                [0x00B5] = new byte[1] { 0 },
                [0x00B6] = new byte[] { 2 },
                [0x00B7] = new byte[] { 2, 2 },
                [0x00B8] = new byte[] { 2 },
                [0x00B9] = new byte[] { 2, 2 },
                [0x00BA] = new byte[] { 2 },
                [0x00BB] = new byte[] { 2, 2},
                [0x00BC] = new byte[] { 2, 2, 2, 2 },
                [0x00BD] = new byte[1] { 0 },
                [0x00BE] = new byte[] { 2, 2, 2, 2, 2 },
                [0x00BF] = new byte[] { 2 },
                [0x00C0] = new byte[] { 2 },
                [0x00C1] = new byte[] { 2 },
                [0x00C2] = new byte[] { 2 },
                [0x00C3] = new byte[1] { 0 },
                [0x00C4] = new byte[1] { 0 },
                [0x00C5] = new byte[] { 2 },
                [0x00C6] = new byte[1] { 0 },
                [0x00C7] = new byte[] { 2 },
                [0x00C8] = new byte[] { 1 },
                [0x00C9] = new byte[] { 1 },
                [0x00CA] = new byte[1] { 0 },
                [0x00CB] = new byte[] { 2 },
                [0x00CC] = new byte[1] { 0 },
                [0x00CD] = new byte[] { 1 },
                [0x00CE] = new byte[] { 1 },
                [0x00CF] = new byte[] { 1 },
                [0x00D0] = new byte[] { 1, 2 },
                [0x00D1] = new byte[] { 1, 2 },
                [0x00D2] = new byte[] { 1, 2 },
                [0x00D3] = new byte[] { 1, 2 },
                [0x00D4] = new byte[] { 1, 2 },
                [0x00D5] = new byte[] { 1, 2 },
                [0x00D6] = new byte[] { 1, 2 },
                [0x00D7] = new byte[] { 1, 2 },
                [0x00D8] = new byte[] { 1, 2 },
                [0x00D9] = new byte[] { 1 },
                [0x00DA] = new byte[] { 1, 2, 2, 1 },
                [0x00DB] = new byte[] { 1 },
                [0x00DC] = new byte[] { 1 },
                [0x00DD] = new byte[] { 1 },
                [0x00DE] = new byte[] { 2 },
                [0x00DF] = new byte[] { 1, 2 },
                [0x00E0] = new byte[] { 1, 2 },
                [0x00E1] = new byte[] { 1, 2 },
                [0x00E2] = new byte[] { 1, 2 },
                [0x00E3] = new byte[] { 2, 2 },
                [0x00E4] = new byte[] { 2 },
                [0x00E5] = new byte[] { 2, 2 },
                [0x00E6] = new byte[] { 2, 2 },
                [0x00E7] = new byte[] { 2, 2, 2 },
                [0x00E8] = new byte[] { 2, 2, 2 },
                [0x00E9] = new byte[] { 2 },
                [0x00EA] = new byte[] { 2 },
                [0x00EB] = new byte[1] { 0 },
                [0x00EC] = new byte[] { 2 },
                [0x00ED] = new byte[] { 2 },
                [0x00EE] = new byte[] { 2 },
                [0x00EF] = new byte[1] { 0 },
                [0x00F0] = new byte[1] { 0 },
                [0x00F1] = new byte[1] { 0 },
                [0x00F2] = new byte[] { 2, 2, 2, 2 },
                [0x00F3] = new byte[] { 2, 2, 2, 2 },
                [0x00F4] = new byte[1] { 0 },
                [0x00F5] = new byte[1] { 0 },
                [0x00F6] = new byte[1] { 0 },
                [0x00F7] = new byte[] { 2 },
                [0x00F8] = new byte[] { 2 },
                [0x00F9] = new byte[] { 2 },
                [0x00FA] = new byte[] { 2, 2, 2, 2 },
                [0x00FB] = new byte[] { 2 },
                [0x00FC] = new byte[1] { 0 },
                [0x00FD] = new byte[] { 2, 2 },
                [0x00FE] = new byte[] { 2, 2 },
                [0x00FF] = new byte[] { 2, 2 },
                [0x0100] = new byte[1] { 0 },
                [0x0101] = new byte[1] { 0 },
                [0x0102] = new byte[] { 2 },
                [0x0103] = new byte[] { 2 },
                [0x0104] = new byte[] { 2 },
                [0x0105] = new byte[1] { 0 },
                [0x0106] = new byte[] { 2 },
                [0x0107] = new byte[] { 2 },
                [0x0108] = new byte[] { 2 },
                [0x0109] = new byte[] { 2 },
                [0x010A] = new byte[] { 2, 2 },
                [0x010B] = new byte[] { 2, 2 },
                [0x010C] = new byte[] { 2 },
                [0x010D] = new byte[] { 2 },
                [0x010E] = new byte[] { 2 },
                [0x010F] = new byte[] { 2 },
                [0x0110] = new byte[] { 2, 2, 2, 2 },
                [0x0111] = new byte[] { 2 },
                [0x0112] = new byte[1] { 0 },
                [0x0113] = new byte[1] { 0 },
                [0x0114] = new byte[1] { 0 },
                [0x0115] = new byte[] { 2, 2, 2 },
                [0x0116] = new byte[1] { 0 },
                [0x0117] = new byte[1] { 0 },
                [0x0118] = new byte[1] { 0 },
                [0x0119] = new byte[] { 2 },
                [0x011A] = new byte[1] { 0 },
                [0x011B] = new byte[] { 2, 2, 2, 2, 2 },
                [0x011C] = new byte[] { 2 },

                [0x011E] = new byte[] { 2 },
                [0x011F] = new byte[1] { 0 },
                [0x0120] = new byte[] { 2 },
                [0x0121] = new byte[] { 2 },
                [0x0122] = new byte[1] { 0 },
                [0x0123] = new byte[] { 1, 2 },
                [0x0124] = new byte[] { 2, 2 },
                [0x0125] = new byte[] { 2 },
                [0x0126] = new byte[1] { 0 },
                [0x0127] = new byte[1] { 0 },
                [0x0128] = new byte[] { 2 },
                [0x0129] = new byte[1] { 0 },
                [0x012A] = new byte[1] { 0 },
                [0x012B] = new byte[1] { 0 },
                [0x012C] = new byte[] { 2 },
                [0x012D] = new byte[] { 2 },
                [0x012E] = new byte[] { 2, 2 },
                [0x012F] = new byte[] { 2, 2 },
                [0x0130] = new byte[] { 2 },
                [0x0131] = new byte[1] { 0 },
                [0x0132] = new byte[] { 2 },
                [0x0133] = new byte[] { 2 },
                [0x0134] = new byte[] { 2, 2 },
                [0x0135] = new byte[] { 2 },
                [0x0136] = new byte[1] { 0 },
                [0x0137] = new byte[1] { 0 },
                [0x0138] = new byte[] { 2 },
                [0x0139] = new byte[] { 2 },
                [0x013A] = new byte[1] { 0 },
                [0x013B] = new byte[1] { 0 },
                [0x013C] = new byte[] { 2 },
                [0x013D] = new byte[1] { 0 },
                [0x013E] = new byte[1] { 0 },
                [0x013F] = new byte[] { 2, 2 },
                [0x0140] = new byte[] { 2 },
                [0x0141] = new byte[] { 2 },
                [0x0142] = new byte[1] { 0 },
                [0x0143] = new byte[] { 2, 2 },
                [0x0144] = new byte[] { 2 },
                [0x0145] = new byte[] { 2 },
                [0x0146] = new byte[] { 2, 2 },
                [0x0147] = new byte[] { 2 },
                [0x0148] = new byte[] { 2 },
                [0x0149] = new byte[] { 2 },
                [0x014A] = new byte[] { 2 },
                [0x014B] = new byte[1] { 0 },
                [0x014C] = new byte[] { 2 },
                [0x014D] = new byte[] { 2 },
                [0x014E] = new byte[1] { 0 },
                [0x014F] = new byte[1] { 0 },
                [0x0150] = new byte[1] { 0 },
                [0x0151] = new byte[1] { 0 },
                [0x0152] = new byte[] { 2 },
                [0x0153] = new byte[1] { 0 },
                [0x0154] = new byte[1] { 0 },
                [0x0155] = new byte[] { 2, 2 },
                [0x0156] = new byte[] { 2 },
                [0x0157] = new byte[1] { 0 },
                [0x0158] = new byte[1] { 0 },
                [0x0159] = new byte[1] { 0 },
                [0x015A] = new byte[1] { 0 },
                [0x015B] = new byte[] { 2, 2 },
                [0x015C] = new byte[] { 2 },
                [0x015D] = new byte[] { 2 },
                [0x015E] = new byte[1] { 0 },
                [0x015F] = new byte[1] { 0 },
                [0x0160] = new byte[] { 2 },
                [0x0161] = new byte[1] { 0 },
                [0x0162] = new byte[1] { 0 },
                [0x0163] = new byte[] { 2 },
                [0x0164] = new byte[1] { 0 },
                [0x0165] = new byte[1] { 0 },
                [0x0166] = new byte[] { 2 },
                [0x0167] = new byte[1] { 0 },
                [0x0168] = new byte[] { 2, 2, 2, 2, 1 },
                [0x0169] = new byte[] { 1 },
                [0x016A] = new byte[] { 1 },
                [0x016B] = new byte[] { 1 },
                [0x016C] = new byte[] { 1 },
                [0x016D] = new byte[1] { 0 },
                [0x016E] = new byte[] { 2 },
                [0x016F] = new byte[1] { 0 },
                [0x0170] = new byte[1] { 0 },
                [0x0171] = new byte[1] { 0 },
                [0x0172] = new byte[1] { 0 },
                [0x0173] = new byte[1] { 0 },
                [0x0174] = new byte[1] { 0 },
                [0x0175] = new byte[] { 1 },
                [0x0176] = new byte[] { 1 },
                [0x0177] = new byte[] { 2 },
                [0x0178] = new byte[] { 1 },
                [0x0179] = new byte[] { 2 },
                [0x017A] = new byte[] { 2, 2 },
                [0x017B] = new byte[] { 2 },
                [0x017C] = new byte[] { 1, 2 },
                [0x017D] = new byte[] { 2 },
                [0x017E] = new byte[] { 2 },
                [0x017F] = new byte[] { 2 },
                [0x0180] = new byte[] { 1 },
                [0x0181] = new byte[] { 2 },
                [0x0182] = new byte[] { 2 },
                [0x0183] = new byte[] { 2 },
                [0x0184] = new byte[] { 2 },
                [0x0185] = new byte[1] { 0 },
                [0x0186] = new byte[] { 2, 2, 2 },
                [0x0187] = new byte[] { 2, 2, 2, 2, 2 },
                [0x0188] = new byte[] { 2, 2 },
                [0x0189] = new byte[] { 2, 2 },
                [0x018A] = new byte[] { 2, 2, 2 },
                [0x018B] = new byte[] { 2, 2, 2 },
                [0x018C] = new byte[] { 2, 2 },
                [0x018D] = new byte[1] { 0 },
                [0x018E] = new byte[1] { 0 },
                [0x018F] = new byte[] { 2 },
                [0x0190] = new byte[] { 2 },
                [0x0191] = new byte[1] { 0 },
                [0x0192] = new byte[1] { 0 },
                [0x0193] = new byte[] { 2 },
                [0x0194] = new byte[] { 2, 2, 2, 2 },
                [0x0195] = new byte[] { 2, 2 },
                [0x0196] = new byte[] { 2 },
                [0x0197] = new byte[] { 2 },
                [0x0198] = new byte[] { 2, 2 },
                [0x0199] = new byte[] { 2, 2 },
                [0x019A] = new byte[] { 2 },
                [0x019B] = new byte[] { 2, 2 },
                [0x019C] = new byte[] { 2 },
                [0x019D] = new byte[] { 2 },
                [0x019E] = new byte[] { 2, 2 },
                [0x019F] = new byte[] { 2 },
                [0x01A0] = new byte[1] { 0 },
                [0x01A1] = new byte[1] { 0 },
                [0x01A2] = new byte[1] { 0 },
                [0x01A3] = new byte[] { 2 },
                [0x01A4] = new byte[] { 2, 2 },
                [0x01A5] = new byte[1] { 0 },
                [0x01A6] = new byte[1] { 0 },
                [0x01A7] = new byte[1] { 0 },
                [0x01A8] = new byte[1] { 0 },
                [0x01A9] = new byte[1] { 0 },
                [0x01AA] = new byte[] { 2, 2 },
                [0x01AB] = new byte[] { 2, 2 },
                [0x01AC] = new byte[1] { 0 },
                [0x01AD] = new byte[1] { 0 },
                [0x01AE] = new byte[] { 2, 2 },
                [0x01AF] = new byte[] { 2, 2, 2 },
                [0x01B0] = new byte[] { 2 },
                [0x01B1] = new byte[] { 2 },
                [0x01B2] = new byte[] { 2 },
                [0x01B3] = new byte[1] { 0 },
                [0x01B4] = new byte[] { 2 },
                [0x01B5] = new byte[] { 2 },
                [0x01B6] = new byte[] { 2 },
                [0x01B7] = new byte[] { 2, 2 },
                [0x01B8] = new byte[] { 2, 2 },
                [0x01B9] = new byte[] { 2, 2 },
                [0x01BA] = new byte[] { 2, 2 },
                [0x01BB] = new byte[1] { 0 },
                [0x01BC] = new byte[] { 2, 2 },
                [0x01BD] = new byte[] { 2 },
                [0x01BE] = new byte[] { 2 },
                [0x01BF] = new byte[] { 2 },
                [0x01C0] = new byte[] { 2, 2 },
                [0x01C1] = new byte[] { 2, 2 },
                [0x01C2] = new byte[] { 2 },
                [0x01C3] = new byte[] { 2, 2, 2 },
                [0x01C4] = new byte[] { 2, 2, 2 },
                [0x01C5] = new byte[1] { 0 },
                [0x01C6] = new byte[] { 2 },
                [0x01C7] = new byte[] { 2 },
                [0x01C8] = new byte[] { 2, 2 },
                [0x01C9] = new byte[] { 2, 2 },
                [0x01CA] = new byte[] { 2, 2, 2 },
                [0x01CB] = new byte[] { 1, 2, 2 },
                [0x01CC] = new byte[1] { 0 },
                [0x01CD] = new byte[] { 2, 2, 2, 2, 2 },
                [0x01CE] = new byte[1] { 0 },
                [0x01CF] = new byte[] { }, /////////////////
                [0x01D0] = new byte[] { }, /////////////////
                [0x01D1] = new byte[] { }, /////////////////
                [0x01D2] = new byte[] { 2, 2 },
                [0x01D3] = new byte[] { 2, 2, 2 },
                [0x01D4] = new byte[1] { 0 },
                [0x01D5] = new byte[] { 2 },
                [0x01D6] = new byte[] { 2, 2 },
                [0x01D7] = new byte[] { 2 },
                [0x01D8] = new byte[] { 2 },
                [0x01D9] = new byte[] { 2, 2 },
                [0x01DA] = new byte[1] { 0 },
                [0x01DB] = new byte[] { 2, 2 },
                [0x01DC] = new byte[1] { 0 },
                [0x01DD] = new byte[] { 2, 2, 2 },
                [0x01DE] = new byte[] { 2, 2, 2, 2 },
                [0x01DF] = new byte[] { 2 },
                [0x01E0] = new byte[] { 2 },
                
                [0x01E2] = new byte[] { 2, 2 },
                [0x01E3] = new byte[] { 2, 2 },
                [0x01E4] = new byte[] { 2 },
                [0x01E5] = new byte[] { 2 },
                [0x01E6] = new byte[] { 2, 2, 2 },
                [0x01E7] = new byte[] { 2, 2, 2, 1 },
                [0x01E8] = new byte[] { 2 },
                [0x01E9] = new byte[] { 2 },
                [0x01EA] = new byte[] { 2 },
                [0x01EB] = new byte[] { 2 },
                [0x01EC] = new byte[1] { 0 },
                [0x01ED] = new byte[] { 2 },
                [0x01EE] = new byte[1] { 0 },
                [0x01EF] = new byte[1] { 0 },
                [0x01F0] = new byte[1] { 0 },
                [0x01F1] = new byte[] { 2 },
                [0x01F2] = new byte[1] { 0 },
                [0x01F3] = new byte[1] { 0 },
                [0x01F4] = new byte[] { 2, 2 },
                [0x01F5] = new byte[] { 2, 2, 2 },
                [0x01F6] = new byte[] { 2, 2 },
                [0x01F7] = new byte[] { 2, 2 },
                [0x01F8] = new byte[1] { 0 },
                [0x01F9] = new byte[] { 2 },
                [0x01FA] = new byte[1] { 0 },
                [0x01FB] = new byte[] { 2, 2 },
                [0x01FC] = new byte[1] { 0 },
                [0x01FD] = new byte[] { 2, 2, 2, 2 },
                [0x01FE] = new byte[] { 1 },
                [0x01FF] = new byte[] { 2, 2, 2 },
                [0x0200] = new byte[] { 2 },
                [0x0201] = new byte[] { 2 },
                [0x0202] = new byte[] { 1 },
                [0x0203] = new byte[] { 2, 2, 2, 2, 2 },
                [0x0204] = new byte[1] { 0 },
                [0x0205] = new byte[1] { 0 },
                [0x0206] = new byte[1] { 0 },
                [0x0207] = new byte[] { 2 },
                [0x0208] = new byte[] { 2, 2 },
                [0x0209] = new byte[1] { 0 },
                [0x020A] = new byte[] { 2 },
                [0x020B] = new byte[1] { 0 },
                [0x020C] = new byte[1] { 0 },
                [0x020D] = new byte[] { 1, 2 },
                [0x020E] = new byte[1] { 0 },
                [0x020F] = new byte[] { 2, 2 },
                [0x0210] = new byte[] { 2, 2 },
                [0x0211] = new byte[] { 1 },
                [0x0212] = new byte[] { 2, 2 },
                [0x0213] = new byte[] { 2, 2 },
                [0x0214] = new byte[] { 2 },
                [0x0215] = new byte[1] { 0 },
                [0x0216] = new byte[] { 2 },
                [0x0217] = new byte[] { 2, 2 },
                [0x0218] = new byte[] { 2 },
                [0x0219] = new byte[] { 2 },
                [0x021A] = new byte[] { 2 },
                [0x021B] = new byte[1] { 0 },
                [0x021C] = new byte[] { 1 },
                [0x021D] = new byte[] { }, ///////////////////
                [0x021E] = new byte[1] { 0 },
                [0x021F] = new byte[] { 2, 2 },
                [0x0220] = new byte[1] { 0 },
                [0x0221] = new byte[] { 2 },
                [0x0222] = new byte[1] { 0 },
                [0x0223] = new byte[] { 2 },
                [0x0224] = new byte[] { 2, 2 },
                [0x0225] = new byte[] { 2 },
                [0x0226] = new byte[] { 1 },
                [0x0227] = new byte[1] { 0 },
                [0x0228] = new byte[] { 2 },
                [0x0229] = new byte[] { 2 },
                [0x022A] = new byte[1] { 0 },
                [0x022B] = new byte[1] { 0 },
                [0x022C] = new byte[1] { 0 },
                [0x022D] = new byte[] { 1, 2 },
                [0x022E] = new byte[] { 2, 2 },
                [0x022F] = new byte[] { 2 },
                [0x0230] = new byte[] { 2, 2, 2 },
                [0x0231] = new byte[] { 2, 2 },
                [0x0232] = new byte[] { 1, 2 },
                [0x0233] = new byte[] { 2, 2 },
                [0x0234] = new byte[] { 2 },
                [0x0235] = new byte[] { }, ///////////////////
                [0x0236] = new byte[] { 2 },
                [0x0237] = new byte[] { 2, 2, 2, 2 },
                [0x0238] = new byte[] { 2, 2 },
                [0x0239] = new byte[] { 2 },
                [0x023A] = new byte[] { 2, 2, 2 },
                [0x023B] = new byte[] { 2 },
                [0x023C] = new byte[] { 2, 2 },
                [0x023D] = new byte[] { 2, 2, 2, 2 },
                [0x023E] = new byte[] { }, /////////////////
                [0x023F] = new byte[1] { 0 },
                [0x0240] = new byte[1] { 0 },
                [0x0241] = new byte[1] { 0 },
                [0x0242] = new byte[1] { 0 },
                [0x0243] = new byte[] { 2, 2, 2 },
                [0x0244] = new byte[] { 2, 2, 2, 2 },
                [0x0245] = new byte[] { 2, 2 },
                [0x0246] = new byte[] { 2 },
                [0x0247] = new byte[] { 2 },
                [0x0248] = new byte[] { 2, 2, 2 },
                [0x0249] = new byte[] { 2, 2, 2, 2, 2 },
                [0x024A] = new byte[] { 2 },
                [0x024B] = new byte[] { 1 },
                [0x024C] = new byte[] { 1 },
                [0x024D] = new byte[] { 1 },
                [0x024E] = new byte[] { 2 },
                [0x024F] = new byte[] { 2, 2, 2, 2 },
                [0x0250] = new byte[1] { 0 },
                [0x0251] = new byte[] { 1, 2 },
                [0x0252] = new byte[] { 2 },
                [0x0253] = new byte[] { 2 },
                [0x0254] = new byte[] { 2 },
                [0x0255] = new byte[1] { 0 },
                [0x0256] = new byte[] { 2, 2 },
                [0x0257] = new byte[1] { 0 },
                [0x0258] = new byte[1] { 0 },
                [0x0259] = new byte[1] { 0 },
                [0x025A] = new byte[] { 2 },
                [0x025B] = new byte[1] { 0 },
                [0x025C] = new byte[1] { 0 },
                [0x025D] = new byte[] { 2 },
                [0x025E] = new byte[1] { 0 },
                [0x025F] = new byte[1] { 0 },
                [0x0260] = new byte[] { 2 },
                [0x0261] = new byte[] { 1, 2 },
                [0x0262] = new byte[] { 2, 2 },
                [0x0263] = new byte[] { 2, 2, 2, 2 },
                [0x0264] = new byte[] { 2 },
                [0x0265] = new byte[1] { 0 },
                [0x0266] = new byte[1] { 0 },
                [0x0267] = new byte[] { 2 },
                [0x0268] = new byte[] { 2 },
                [0x0269] = new byte[] { 2, 2, 2, 2, 2 },
                [0x026A] = new byte[] { 2, 2, 2 },
                [0x026B] = new byte[] { 2 },
                [0x026C] = new byte[] { 2 },
                [0x026D] = new byte[] { 2 },
                [0x026E] = new byte[] { 2 },
                [0x026F] = new byte[1] { 0 },
                [0x0270] = new byte[] { 1, 2 },
                [0x0271] = new byte[] { 2 },
                [0x0272] = new byte[] { 1 },
                [0x0273] = new byte[] { 1, 2 },
                [0x0274] = new byte[] { 2, 4 },
                [0x0275] = new byte[] { 2 },
                [0x0276] = new byte[] { 2, 2, 2 },
                [0x0277] = new byte[] { 2 },
                [0x0278] = new byte[] { 2, 2 },
                [0x0279] = new byte[1] { 0 },
                [0x027A] = new byte[1] { 0 },
                [0x027B] = new byte[1] { 0 },
                [0x027C] = new byte[] { 2, 2 },
                [0x027D] = new byte[] { 2, 2 },
                [0x027E] = new byte[] { 2 },
                [0x027F] = new byte[] { 2 },
                [0x0280] = new byte[] { 1, 2, 2 },
                [0x0281] = new byte[] { 2, 2, 2 },
                [0x0282] = new byte[] { 2 },
                [0x0283] = new byte[] { 2, 2 },
                [0x0284] = new byte[] { 2 },
                [0x0285] = new byte[] { 2, 2 },
                [0x0286] = new byte[] { 2 },
                [0x0287] = new byte[] { 2 },
                [0x0288] = new byte[] { 2 },
                [0x0289] = new byte[] { 2, 1, 2, 2, 2, 1, 2 },
                [0x028A] = new byte[] { 2 },
                [0x028B] = new byte[] { 1, 2 },
                [0x028C] = new byte[] { 2 },
                [0x028D] = new byte[1] { 0 },
                [0x028E] = new byte[] { 2 },
                [0x028F] = new byte[] { 2 },
                [0x0290] = new byte[] { 2 },
                [0x0291] = new byte[] { 2, 2 },
                [0x0292] = new byte[] { 1, 2 },
                [0x0293] = new byte[] { 2 },
                [0x0294] = new byte[] { 2 },
                [0x0295] = new byte[1] { 0 },
                [0x0296] = new byte[1] { 0 },
                [0x0297] = new byte[1] { 0 },
                [0x0298] = new byte[1] { 0 },
                [0x0299] = new byte[] { 2 },
                [0x029A] = new byte[] { 2, 2 },
                [0x029B] = new byte[] { 2, 2, 2, 2 },
                [0x029C] = new byte[] { 2, 2 },
                [0x029D] = new byte[] { 2, 2 },
                [0x029E] = new byte[] { 2, 2 },
                [0x029F] = new byte[] { 2 },
                [0x02A0] = new byte[] { 2, 2, 2 },
                [0x02A1] = new byte[1] { 0 },
                [0x02A2] = new byte[] { 2 },
                [0x02A3] = new byte[] { 2 },
                [0x02A4] = new byte[] { 2 },
                [0x02A5] = new byte[1] { 0 },
                [0x02A6] = new byte[] { 2, 2, 2 },
                [0x02A7] = new byte[] { 2, 2 },
                [0x02A8] = new byte[] { 2 },
                [0x02A9] = new byte[] { 2, 2 },
                [0x02AA] = new byte[] { 2, 2, 2, 2, 2 },
                [0x02AB] = new byte[] { 2 },
                [0x02AC] = new byte[1] { 0 },
                [0x02AD] = new byte[] { 2, 2 },
                [0x02AE] = new byte[1] { 0 },
                [0x02AF] = new byte[] { 2 },
                [0x02B0] = new byte[1] { 0 },
                [0x02B1] = new byte[1] { 0 },
                [0x02B2] = new byte[1] { 0 },
                [0x02B3] = new byte[] { 1, 2 },
                [0x02B4] = new byte[1] { 0 },
                [0x02B5] = new byte[] { 2, 2, 2 },
                [0x02B6] = new byte[] { 1, 2 },
                [0x02B7] = new byte[] { 2 },
                [0x02B8] = new byte[] { 2 },
                [0x02B9] = new byte[1] { 0 },
                [0x02BA] = new byte[] { 2 },
                [0x02BB] = new byte[1] { 0 },
                [0x02BC] = new byte[] { 2 },
                [0x02BD] = new byte[] { 2, 2 },
                [0x02BE] = new byte[] { 2 },
                [0x02BF] = new byte[1] { 0 },
                [0x02C0] = new byte[] { 2 },
                [0x02C1] = new byte[1] { 0 },
                [0x02C2] = new byte[1] { 0 },
                [0x02C3] = new byte[1] { 1 },
            };

            public static Dictionary<ushort, string> DPScrCmdNames = new Dictionary<ushort, string>() {
                [0x011D] = "ElevatorFloorWrite",

                [0x0264] = "CheckBurmyForm",
            };
            public static Dictionary<ushort, byte[]> DPScrCmdParameters = new Dictionary<ushort, byte[]>() {
                [0x011D] = new byte[] { 1, 1, 2},

                [0x01E1] = new byte[] { 2, 2 },

                //0x02C3 is the last command ID that DP and Plat have in common
                //International release exclusive
                [0x02C4] = new byte[] { 1, 2 },
                [0x02C5] = new byte[] { 1, 2 },
                [0x02C6] = new byte[] { 1, 2 },
                [0x02C7] = new byte[] { 1, 2 },
                [0x02C8] = new byte[] { 1, 2 },
                [0x02C9] = new byte[] { 1, 2, 2, 1 },
                [0x02CA] = new byte[] { 1 },
                [0x02CB] = new byte[] { 1, 2 },
                [0x02CC] = new byte[] { 1, 2 },
                [0x02CD] = new byte[] { 1, 2 },
                [0x02CE] = new byte[] { 1 },
                [0x02CF] = new byte[] { 1 },
                [0x02D0] = new byte[] { 2, 2, 2 },
                [0x02D1] = new byte[] { 1, 1 }
            };

            public static Dictionary<ushort, string> PlatScrCmdNames = new Dictionary<ushort, string>() {
                [0x011D] = "ElevatorFloorWrite",

                [0x0264] = "CombeeCheck",

                //0x02C3 is the last command ID that DP and Plat have in common
                [0x02C6] = "SpinTradeUnion",
                [0x02C7] = "CheckGameVersion",
                [0x02C9] = "InitEternaGym",
                [0x02CA] = "FloralClockAnimation",
                [0x02FB] = "SpearPillarSequence2",
                [0x0328] = "PortalEffect",

                //International release exclusive
                [0x0347] = "DisplayFloor"
            };
            public static Dictionary<ushort, byte[]> PlatScrCmdParameters = new Dictionary<ushort, byte[]>() {
                [0x011D] = new byte[] { 1, 1, 2, 2 },

                [0x01E1] = new byte[] { 2, 2, 2 },

                //0x02C3 is the last command ID that DP and Plat have in common
                [0x02C4] = new byte[] { 1 },
                [0x02C5] = new byte[] { 1, 2 },
                [0x02C6] = new byte[] { 1, 2 },
                [0x02C7] = new byte[] { 2 },
                [0x02C8] = new byte[] { 2, 2, 2 },
                [0x02C9] = new byte[1] { 0 },
                [0x02CA] = new byte[1] { 0 },
                [0x02CB] = new byte[] { 2, 2 },
                [0x02CC] = new byte[] { 2, 2, 2 },
                [0x02CD] = new byte[1] { 0 },
                [0x02CE] = new byte[1] { 0 },
                [0x02CF] = new byte[] { 2, 2 },
                [0x02D0] = new byte[] { 2, 2 },
                [0x02D1] = new byte[] { 2 },
                [0x02D2] = new byte[] { 2, 2, 2 },
                [0x02D3] = new byte[] { 2, 2, 2 },
                [0x02D4] = new byte[] { 2, 2, 2 },
                [0x02D5] = new byte[] { 2 },
                [0x02D6] = new byte[1] { 0 },
                [0x02D7] = new byte[] { 2 },
                [0x02D8] = new byte[] { 1 },
                [0x02D9] = new byte[] { 2, 2, 2 },
                [0x02DA] = new byte[] { 2, 2, 2 },
                [0x02DB] = new byte[] { 2, 2, 2 },
                [0x02DC] = new byte[] { 2 },
                [0x02DD] = new byte[] { 2, 2 },
                [0x02DE] = new byte[] { 2, 2, 2, 2, 2 },
                [0x02DF] = new byte[] { 2 },
                [0x02E0] = new byte[] { 2, 2 },
                [0x02E1] = new byte[] { 2, 2 },
                [0x02E2] = new byte[1] { 0 },
                [0x02E3] = new byte[1] { 0 },
                [0x02E4] = new byte[] { 2, 2, 2 },
                [0x02E5] = new byte[] { 2, 2, 2 },
                [0x02E6] = new byte[] { 2, 2, 2 },
                [0x02E7] = new byte[] { 2, 2 },
                [0x02E8] = new byte[] { 2 },
                [0x02E9] = new byte[] { 2, 2, 2 },
                [0x02EA] = new byte[] { 2, 2 },
                [0x02EB] = new byte[] { 2 },
                [0x02EC] = new byte[] { 2, 2, 2 },
                [0x02ED] = new byte[1] { 0 },
                [0x02EE] = new byte[] { 2, 2, 2, 2 },
                [0x02EF] = new byte[1] { 0 },
                [0x02F0] = new byte[1] { 0 },
                [0x02F1] = new byte[1] { 0 },
                [0x02F2] = new byte[1] { 0 },
                [0x02F3] = new byte[] { 1, 2 },
                [0x02F4] = new byte[] { 2, 2, 2, 2 },
                [0x02F5] = new byte[] { 1, 2, 2, 2 },
                [0x02F6] = new byte[] { 2, 2, 2 },
                [0x02F7] = new byte[] { 2 },
                [0x02F8] = new byte[1] { 0 },
                [0x02F9] = new byte[] { 2 },
                [0x02FA] = new byte[] { 2 },
                [0x02FB] = new byte[1] { 0 },
                [0x02FC] = new byte[] { 2 },
                [0x02FD] = new byte[] { 2, 2, 2 },
                [0x02FE] = new byte[] { 2, 2 },
                [0x02FF] = new byte[] { 2, 2 },
                [0x0300] = new byte[1] { 0 },
                [0x0301] = new byte[1] { 0 },
                [0x0302] = new byte[] { 2, 2, 2, 2, 2 },
                [0x0303] = new byte[] { 2, 2 },
                [0x0304] = new byte[] { 2, 2, 2, 2 },
                [0x0305] = new byte[] { 2, 2 },
                [0x0306] = new byte[] { 2, 2 },
                [0x0307] = new byte[] { 2 },
                [0x0308] = new byte[1] { 0 },
                [0x0309] = new byte[1] { 0 },
                [0x030A] = new byte[] { 2 },
                [0x030B] = new byte[1] { 0 },
                [0x030C] = new byte[1] { 0 },
                [0x030D] = new byte[] { 2 },
                [0x030E] = new byte[] { 2 },
                [0x030F] = new byte[] { 2, 2 },
                [0x0310] = new byte[1] { 0 },
                [0x0311] = new byte[] { 2 },
                [0x0312] = new byte[] { 2 },
                [0x0313] = new byte[] { 2 },
                [0x0314] = new byte[] { 2 },
                [0x0315] = new byte[] { 2 },
                [0x0316] = new byte[1] { 0 },
                [0x0317] = new byte[] { 2, 2, 2 },
                [0x0318] = new byte[] { 2, 2, 2, 2 },
                [0x0319] = new byte[] { 2, 2, 2, 2 },
                [0x031A] = new byte[1] { 0 },
                [0x031B] = new byte[] { 2 },
                [0x031C] = new byte[] { 2 },
                [0x031D] = new byte[] { 2 },
                [0x031E] = new byte[] { 2, 2 },
                [0x031F] = new byte[1] { 0 },
                [0x0320] = new byte[1] { 0 },
                [0x0321] = new byte[] { 2 },
                [0x0322] = new byte[1] { 0 },
                [0x0323] = new byte[] { 2 },
                [0x0324] = new byte[] { 2, 2, 2, 2 },
                [0x0325] = new byte[] { 2 },
                [0x0326] = new byte[] { 2 },
                [0x0327] = new byte[] { 2 },
                [0x0328] = new byte[] { 2 },
                [0x0329] = new byte[] { 2, 2, 2, 2 },
                [0x032A] = new byte[] { 2 },
                [0x032B] = new byte[] { 2 },
                [0x032C] = new byte[] { 2, 2, 2, 2, },
                [0x032D] = new byte[1] { 0 },
                [0x032E] = new byte[1] { 0 },
                [0x032F] = new byte[] { 2, 2 },
                [0x0330] = new byte[1] { 0 },
                [0x0331] = new byte[1] { 0 },
                [0x0332] = new byte[1] { 0 },
                [0x0333] = new byte[] { 2 },
                [0x0334] = new byte[1] { 0 },
                [0x0335] = new byte[] { 2, 4 },
                [0x0336] = new byte[] { 2 },

                //International release exclusive
                [0x0337] = new byte[1] { 0 },
                [0x0338] = new byte[1] { 0 },
                [0x0339] = new byte[1] { 0 },
                [0x033A] = new byte[] { 1 },
                [0x033B] = new byte[1] { 0 },
                [0x033C] = new byte[] { 1, 2 },
                [0x033D] = new byte[] { 1, 2 },
                [0x033E] = new byte[] { 1, 2 },
                [0x033F] = new byte[] { 1, 2 },
                [0x0340] = new byte[] { 1, 2 },
                [0x0341] = new byte[] { 1, 2, 2, 1 },
                [0x0342] = new byte[] { 1 },
                [0x0343] = new byte[] { 1, 2 },
                [0x0344] = new byte[] { 1, 2 },
                [0x0345] = new byte[] { 1, 2 },
                [0x0346] = new byte[] { 1 },
                [0x0347] = new byte[] { 1, 1 }
            };

            public static Dictionary<ushort, string> HGSSScrCmdNames = new Dictionary<ushort, string>() {
                [0x0000] = "Nop",
                [0x0001] = "Dummy",
                [0x0002] = "End",
                [0x0003] = "WaitTime",
                [0x0004] = "RegValueSet",
                [0x0005] = "RegDataSet",
                [0x0006] = "RegAdrsSet",
                [0x0007] = "AdrsValueSet",
                [0x0008] = "AdrsRegSet",
                [0x0009] = "RegRegSet",
                [0x000A] = "AdrsAdrsSet",
                [0x000B] = "IfRegReg",
                [0x000C] = "IfRegValue",
                [0x000D] = "IfRegAdrs",
                [0x000E] = "IfAdrsReg",
                [0x000F] = "IfAdrsValue",
                [0x0010] = "IfAdrsAdrs",
                [0x0011] = "CompareVarValue",
                [0x0012] = "CompareVars",
                [0x0014] = "CommonScript",
                [0x0015] = "LocalScript",
                [0x0016] = "Jump",
                [0x0017] = "JumpIfObjID",
                [0x0018] = "JumpIfBgID",
                [0x0019] = "JumpIfPlayerDir",
                [0x001A] = "Call",
                [0x001B] = "Return",
                [0x001C] = "Jump-If",
                [0x001D] = "Call-If",
                [0x001E] = "SetFlag",
                [0x001F] = "ClearFlag",
                [0x0020] = "CheckFlag",
                [0x0021] = "SetFlagFromVar",
                [0x0022] = "ClearFlagFromVar",
                [0x0023] = "FlagStatusToVar",
                [0x0024] = "SetTrainerFlag",
                [0x0025] = "ClearTrainerFlag",
                [0x0026] = "CheckTrainerFlag",
                [0x0027] = "IncrementVar",
                [0x0028] = "DecrementVar",
                [0x0029] = "SetVar",
                [0x002A] = "SetVarFromVariable",
                [0x002B] = "SetVarFromFlexible",
                [0x002C] = "MessageAll",
                [0x002D] = "Message",
                [0x002E] = "MessageSp",
                [0x002F] = "MessageNoSkip",
                [0x0031] = "WaitAB",
                [0x0032] = "WaitButton",
                [0x0033] = "WaitABPad",
                [0x0034] = "OpenMessage",
                [0x0035] = "CloseMessage",
                [0x0036] = "FreezeMessage",
                [0x0037] = "MakeBoard",
                [0x0038] = "BoardInfo",
                [0x0039] = "ShowBoard",
                [0x003A] = "WaitBoard",
                [0x003B] = "BoardMessage",
                [0x003C] = "EndBoard",
                [0x003D] = "Menu",

                [0x0040] = "MultiStandardText",
                [0x0041] = "MultiLocalText",
                [0x0042] = "AddMultiOption",
                [0x0043] = "ShowMulti",
                [0x0044] = "ListStandardText",
                [0x0045] = "ListLocalText",
                [0x0046] = "AddListOption",
                [0x0047] = "ShowList",
                [0x0048] = "MultiColumn",
                [0x0049] = "PlayFanfare",
                [0x004A] = "StopFanfare",
                [0x004B] = "WaitFanfare",
                [0x004C] = "PlayCry",
                [0x004D] = "WaitCry",
                [0x004E] = "PlaySound",
                [0x004F] = "WaitSound",
                [0x0050] = "PlayMusic",
                [0x0051] = "StopMusic",
                [0x0052] = "PlayDefaultMusic",
                [0x0053] = "SetMusic",
                [0x0054] = "FadeOutMusic",
                [0x0055] = "FadeInMusic",
                [0x0059] = "CheckChatotCry",
                [0x005A] = "StartChatotCry",
                [0x005B] = "StopChatotCry",
                [0x005C] = "SaveChatotCry",
                [0x005E] = "Movement",
                [0x005F] = "WaitMovement",
                [0x0060] = "LockAll",
                [0x0061] = "ReleaseAll",
                [0x0062] = "Lock",
                [0x0063] = "Release",
                [0x0064] = "AddOW",
                [0x0065] = "RemoveOW",
                [0x0066] = "LockCamera",
                [0x0067] = "ReleaseCamera",
                [0x0068] = "FacePlayer",
                [0x0069] = "CheckPlayerPosition",
                [0x006A] = "CheckOverworldPosition",
                [0x006C] = "KeepOverworld",
                [0x006D] = "OverworldDefaultMovement",
                [0x006E] = "GiveMoney",
                [0x006F] = "TakeMoney",
                [0x0070] = "CompareMoney",
                [0x0071] = "ShowMoney",
                [0x0072] = "HideMoney",
                [0x0073] = "UpdateMoney",

                [0x0077] = "CheckCoins",
                [0x0078] = "GiveCoins",
                [0x0079] = "TakeCoins",

                [0x007E] = "TakeItem",
                [0x007F] = "GiveItem",
                [0x0080] = "CheckItem",
                [0x0081] = "CheckItemIsMachine",
                [0x0082] = "CheckItemPocket",

                [0x0084] = "GenderMessage",

                [0x0089] = "GiveStoredPokemon",
                [0x008A] = "GivePokemonEgg",

                [0x008D] = "CheckMoveInParty",

                [0x0092] = "RecordPokegearNumber",

                [0x0096] = "ReturnScreen",

                [0x009D] = "WorldMapScreen",
                [0x00A1] = "CallEnd2",
                [0x00A3] = "EndGame",
                [0x00A6] = "WFC",

                [0x00AD] = "GivePokemonNickname",
                [0x00AE] = "FadeScreen",
                [0x00AF] = "WaitFadeScreen",
                [0x00B0] = "Warp",

                [0x00B1] = "HallFameData",
                [0x00B3] = "WFC1",
                [0x00BA] = "CyclingRoad",
                [0x00BB] = "CheckPlayerAction",
                [0x00BC] = "SetPlayerAction",
                [0x00BD] = "UpdatePlayerAction",
                [0x00BE] = "TextPlayerName",
                [0x00BF] = "TextRivalName",
                [0x00C0] = "TextCounterpart",
                [0x00C1] = "TextPokemon",
                [0x00C2] = "TextItem",
                [0x00C4] = "TextAttackItem",
                [0x00C5] = "TextMoveName",
                [0x00C6] = "TextNumber",
                [0x00C7] = "TextPokeNickname",
                [0x00C8] = "TextObject",
                [0x00C9] = "TextPlayerTrainerType",
                [0x00CA] = "TextPokemonStored",
                [0x00CB] = "TextStarterPokemon",
                [0x00CC] = "TextRivalStarter",
                [0x00CD] = "TextCounterpartStarter",
                [0x00CE] = "CheckStarter",

                [0x00D2] = "TextMapName",
                [0x00D3] = "CheckSwarm",
                [0x00D4] = "TrainerID",
                [0x00D5] = "TrainerBattle",
                [0x00D6] = "TrainerMessage",
                [0x00D7] = "TrainerMsgCheck",
                [0x00D8] = "TrainerRematchMsgCheck",
                [0x00D9] = "TrainerTypeCheck",
                [0x00DA] = "TrainerMusic",
                [0x00DB] = "LostBattle",
                [0x00DC] = "CheckBattleIsLost",

                
                [0x00F0] = "WarpLift",
                [0x00F1] = "CheckElevatorFloor",
                [0x00F2] = "ElevatorBox",
                [0x00F3] = "WirelessBattleWait",
                [0x00F7] = "PokemonContest",

                [0x00F9] = "WildBattle",
                [0x00FA] = "FirstBattle",
                [0x00FB] = "CatchTutorial",

                [0x0119] = "CheckGender",
                [0x011A] = "HealPokemon",
                [0x0123] = "ActivatePokedex",
                [0x0125] = "GiveRunningShoes",
                [0x0126] = "CheckBadge",
                [0x0127] = "GiveBadge",
                [0x0128] = "CheckBadgeCount",
                [0x0133] = "DoorAnimation",
                [0x0134] = "WaitDoor",
                [0x0135] = "FreeDoor",
                [0x0136] = "OpenDoor",
                [0x0137] = "CloseDoor",
                [0x0141] = "VermillionGymAnimation",
                [0x0142] = "VermillionGymBin",
                [0x0147] = "AzaleaGym",
                [0x0148] = "AzaleaGym2",
                [0x014C] = "GetPartyCount",
                [0x0153] = "SetOverworldPosition",

                [0x0163] = "CheckIfPokemonTraded",
                [0x0170] = "CheckHiroMoneyNumber",
                [0x0171] = "EggHatchScreen", //This command is dangerous when used without an egg in party
                [0x0176] = "UnvanishOverworld",
                [0x0177] = "VanishOverworld",
                [0x0178] = "OpenMail",
                [0x0179] = "CheckMail",

                [0x017B] = "GetTimePeriod",
                [0x017C] = "GetRandom",
                [0x017D] = "DummyGetRandom",
                [0x017E] = "CheckHappiness",
                [0x017F] = "AddHappiness",
                [0x0180] = "SubHappiness",

                [0x0182] = "CheckPlayerDir",

                [0x0182] = "GetPlayerDirection",
                [0x0188] = "ComparePokemonHeight",
                [0x0189] = "CheckPokemonHeight",
                [0x018A] = "ChoosePokemonDelete",
                [0x018B] = "StoreMoveDelete",
                [0x018C] = "CheckMoveNumber",
                [0x018D] = "DeleteMove",
                [0x018F] = "TextMoveDelete",
                [0x0190] = "Strength",
                [0x0194] = "GiveItemStored",

                [0x01D0] = "AddRoamingPokémon",
                [0x01D1] = "Group",

                [0x01D3] = "ChoosePokemonRem",
                [0x01D5] = "StoreMoveRem",
                [0x01D8] = "CheckPokemonTrade",
                [0x01D9] = "TradeChosenPokemon",
                [0x01DA] = "StopTrade",

                [0x01DE] = "PokemonRibbonCount",
                [0x01DF] = "PartyRibbonCount",

                [0x01E0] = "CheckRibbon",
                [0x01E1] = "GiveRibbon",
                [0x01E2] = "TextRibbon",
                [0x01E3] = "PokemonEVCount",
                [0x01E4] = "GetDayOfWeek",

                [0x01E9] = "MysteryGiftGive",

                [0x01EF] = "CheckVersion",
                [0x01F0] = "FirstPokemonInParty",

                [0x01FB] = "CountPCFreeSpace",
                [0x01FF] = "StoreFriendParkResult",

                [0x020A] = "GetHour",
                [0x020B] = "ShakeOverworld",
                [0x020C] = "BlinkOverworld",

                [0x020F] = "MessageUnown",
                [0x0210] = "CheckGBACartidge",
                [0x0211] = "GetFirstPokemonAlive",

                [0x0231] = "ShakeCamera",
                [0x0232] = "Battle2vs2",

                [0x0236] = "ChoosePokemonMenuTrade",
                [0x024D] = "WildBattleSp",

                [0x025A] = "LockFollowingPoke",
                [0x025B] = "WaitFollowingPoke",
                [0x025C] = "MoveFollowingPoke",

                [0x0258] = "StartFriendPark",
                [0x025E] = "EndFriendPark",
                [0x0261] = "MecScript",
                [0x0267] = "TakePhoto",
                [0x026A] = "CheckAlbumPhoto",
                [0x02BC] = "CheckWildBattle2",
                [0x02BD] = "WildBattle2",

                [0x02D9] = "CheckPokemonAlive",
                [0x02DA] = "CheckFollowingPoke",

                [0x02EA] = "OpenTouchScreen",
                [0x02EB] = "CloseTouchScreen",
                [0x02EC] = "YesNoTouchScreen",
                [0x02ED] = "MultiStandardText",
                [0x02EE] = "MultiLocalText",
                [0x02EF] = "CreateMultiBox",
                [0x02F0] = "CloseMulti",
                [0x0319] = "TakeMomMoney",
                [0x031A] = "GiveMomMoney",
                [0x031B] = "OpenMomMoneyBox",
                [0x031C] = "CloseMomMoneyBox",
                [0x0346] = "CheckMomMoneyNumber"
            };
            public static Dictionary<ushort, byte[]> HGSSScrCmdParameters = new Dictionary<ushort, byte[]>() {
                [0x0000] = new byte[1] { 0 },
                [0x0001] = new byte[1] { 0 },
                [0x0002] = new byte[1] { 0 },
                [0x0003] = new byte[] { 2, 2 },
                [0x0004] = new byte[] { 1, 1 },
                [0x0005] = new byte[] { 1, 4 },
                [0x0006] = new byte[] { 1, 4 },
                [0x0007] = new byte[] { 4, 1 },
                [0x0008] = new byte[] { 4, 1 },
                [0x0009] = new byte[] { 1, 1 },
                [0x000A] = new byte[] { 4, 4 },
                [0x000B] = new byte[] { 1, 1 },
                [0x000C] = new byte[] { 1, 1 },
                [0x000D] = new byte[] { 1, 4 },
                [0x000E] = new byte[] { 4, 1 },
                [0x000F] = new byte[] { 4, 1 },
                [0x0010] = new byte[] { 4, 4 },
                [0x0011] = new byte[] { 2, 2 },
                [0x0012] = new byte[] { 2, 2 },
                [0x0013] = new byte[] { 2 },
                [0x0014] = new byte[] { 2 },
                [0x0015] = new byte[1] { 0 },
                [0x0016] = new byte[] { 4 },
                [0x0017] = new byte[] { 1, 4 },
                [0x0018] = new byte[] { 1, 4 },
                [0x0019] = new byte[] { 1, 4 },
                [0x001A] = new byte[] { 4 },
                [0x001B] = new byte[1] { 0 },
                [0x001C] = new byte[] { 1, 4 },
                [0x001D] = new byte[] { 1, 4 },
                [0x001E] = new byte[] { 2 },
                [0x001F] = new byte[] { 2 },
                [0x0020] = new byte[] { 2 },
                [0x0021] = new byte[] { 2 },
                [0x0022] = new byte[] { 2 },
                [0x0023] = new byte[] { 2, 2 },
                [0x0024] = new byte[] { 2 },
                [0x0025] = new byte[] { 2 },
                [0x0026] = new byte[] { 2 },
                [0x0027] = new byte[] { 2, 2 },
                [0x0028] = new byte[] { 2, 2 },
                [0x0029] = new byte[] { 2, 2 },
                [0x002A] = new byte[] { 2, 2 },
                [0x002B] = new byte[] { 2, 2 },
                [0x002C] = new byte[] { 1 },
                [0x002D] = new byte[] { 1 },
                [0x002E] = new byte[] { 2 },
                [0x002F] = new byte[] { 2 },
                [0x0030] = new byte[] { 1 },
                [0x0031] = new byte[1] { 0 },
                [0x0032] = new byte[1] { 0 },
                [0x0033] = new byte[1] { 0 },
                [0x0034] = new byte[1] { 0 },
                [0x0035] = new byte[1] { 0 },
                [0x0036] = new byte[1] { 0 },
                [0x0037] = new byte[] { 1, 1, 2, 2 },
                [0x0038] = new byte[] { 1, 2 },
                [0x0039] = new byte[] { 1 },
                [0x003A] = new byte[1] { 0 },
                [0x003B] = new byte[] { 1, 2 },
                [0x003C] = new byte[] { 2 },
                [0x003D] = new byte[1] { 0 },
                [0x003E] = new byte[] { 1, 1, 1, 1, 1, 1 },
                [0x003F] = new byte[] { 2 },
                [0x0040] = new byte[] { 1, 1, 1, 1, 2 },
                [0x0041] = new byte[] { 1, 1, 1, 1, 2 },
                [0x0042] = new byte[] { 1, 1 },
                [0x0043] = new byte[1] { 0 },
                [0x0044] = new byte[] { 1, 1, 1, 1, 2 },
                [0x0045] = new byte[] { 1, 1, 1, 1, 2 },
                [0x0046] = new byte[] { 2, 2, 2 },
                [0x0047] = new byte[1] { 0 },
                [0x0048] = new byte[] { 1 },
                [0x0049] = new byte[] { 2 },
                [0x004A] = new byte[] { 2 },
                [0x004B] = new byte[] { 2 },
                [0x004C] = new byte[] { 2, 2 },
                [0x004D] = new byte[1] { 0 },
                [0x004E] = new byte[] { 2 },
                [0x004F] = new byte[1] { 0 },
                [0x0050] = new byte[] { 2 },
                [0x0051] = new byte[] { 2 },
                [0x0052] = new byte[1] { 0 },
                [0x0053] = new byte[] { 2 },
                [0x0054] = new byte[] { 2, 2 },
                [0x0055] = new byte[] { 2 },
                [0x0056] = new byte[] { 1, 1 },
                [0x0057] = new byte[] { 2 },
                [0x0058] = new byte[] { 1 },
                [0x0059] = new byte[] { 2 },
                [0x005A] = new byte[] { 2 },
                [0x005B] = new byte[1] { 0 },
                [0x005C] = new byte[1] { 0 },
                [0x005D] = new byte[1] { 0 },
                [0x005E] = new byte[] { 2, 4 },
                [0x005F] = new byte[1] { 0 },
                [0x0060] = new byte[1] { 0 },
                [0x0061] = new byte[1] { 0 },
                [0x0062] = new byte[] { 2 },
                [0x0063] = new byte[] { 2 },
                [0x0064] = new byte[] { 2 },
                [0x0065] = new byte[] { 2 },
                [0x0066] = new byte[] { 2, 2 },
                [0x0067] = new byte[1] { 0 },
                [0x0068] = new byte[1] { 0 },
                [0x0069] = new byte[] { 2, 2 },
                [0x006A] = new byte[] { 2, 2, 2 },
                [0x006B] = new byte[] { 2, 2, 2 },
                [0x006C] = new byte[] { 2, 1 },
                [0x006D] = new byte[] { 2, 2 },
                [0x006E] = new byte[] { 4 },
                [0x006F] = new byte[] { 4 },
                [0x0070] = new byte[] { 2, 4 },
                [0x0071] = new byte[] { 2, 2 },
                [0x0072] = new byte[1] { 0 },
                [0x0073] = new byte[1] { 0 },
                [0x0074] = new byte[] { 1 },
                [0x0075] = new byte[1] { 0 },
                [0x0076] = new byte[] { 1 },
                [0x0077] = new byte[] { 2 },
                [0x0078] = new byte[] { 2 },
                [0x0079] = new byte[] { 2 },
                [0x007A] = new byte[] { 2, 2, 2 },
                [0x007B] = new byte[1] { 0 },
                [0x007C] = new byte[] { 2, 2, 2 },
                [0x007D] = new byte[] { 2, 2, 2 },
                [0x007E] = new byte[] { 2, 2, 2 },
                [0x007F] = new byte[] { 2, 2, 2 },
                [0x0080] = new byte[] { 2, 2, 2 },
                [0x0081] = new byte[] { 2, 2 },
                [0x0082] = new byte[] { 2, 2 },
                [0x0083] = new byte[] { 2 },
                [0x0084] = new byte[] { 1, 1 },
                [0x0085] = new byte[] { 2, 2 },
                [0x0086] = new byte[] { 2, 2 },
                [0x0087] = new byte[] { 2, 2, 2 },
                [0x0088] = new byte[] { 2, 2 },
                [0x0089] = new byte[] { 2, 2, 2, 2, 2, 2 },
                [0x008A] = new byte[] { 2, 2 },
                [0x008B] = new byte[] { 2, 2, 2 },
                [0x008C] = new byte[] { 2, 2, 2 },
                [0x008D] = new byte[] { 2, 2 },
                [0x008E] = new byte[] { 2, 2 },
                [0x008F] = new byte[] { 2, 2, 2 },
                [0x0090] = new byte[] { 2 },
                [0x0091] = new byte[] { 1 },
                [0x0092] = new byte[] { 2 },
                [0x0093] = new byte[] { 2, 2 },
                [0x0094] = new byte[] { 2, 2 },
                [0x0095] = new byte[] { 1 },
                [0x0096] = new byte[1] { 0 },
                [0x0097] = new byte[1] { 0 },
                [0x0098] = new byte[1] { 0 },
                [0x0099] = new byte[] { 2, 2, 2 },
                [0x009A] = new byte[] { 2, 2, 2 },
                [0x009B] = new byte[] { 2, 2 },
                [0x009C] = new byte[1] { 0 },
                [0x009D] = new byte[1] { 0 },
                [0x009E] = new byte[] { 1 },
                [0x009F] = new byte[1] { 0 },
                [0x00A0] = new byte[1] { 0 },
                [0x00A1] = new byte[1] { 0 },
                [0x00A2] = new byte[1] { 0 },
                [0x00A3] = new byte[] { 2 },
                [0x00A4] = new byte[] { 2, 2, 2, 2 },
                [0x00A5] = new byte[] { 2, 2 },
                [0x00A6] = new byte[] { 2 },
                [0x00A7] = new byte[] { 2, 2 },
                [0x00A8] = new byte[] { 2 },
                [0x00A9] = new byte[] { 2, 2 },
                [0x00AA] = new byte[] { 2 },
                [0x00AB] = new byte[] { 2, 2 },
                [0x00AC] = new byte[1] { 0 },
                [0x00AD] = new byte[] { 2, 2 },
                [0x00AE] = new byte[] { 2, 2, 2, 2 },
                [0x00AF] = new byte[1] { 0 },
                [0x00B0] = new byte[] { 2, 2, 2, 2, 2 },
                [0x00B1] = new byte[] { 2 },
                [0x00B2] = new byte[] { 2, 2, 2, 2 },
                [0x00B3] = new byte[] { 2 },
                [0x00B4] = new byte[1] { 0 },
                [0x00B5] = new byte[1] { 0 },
                [0x00B6] = new byte[] { 2 },
                [0x00B7] = new byte[] { 2, 2 },
                [0x00B8] = new byte[] { 2 },
                [0x00B9] = new byte[] { 1 },
                [0x00BA] = new byte[] { 1 },
                [0x00BB] = new byte[] { 2 },
                [0x00BC] = new byte[] { 2 },
                [0x00BD] = new byte[1] { 0 },
                [0x00BE] = new byte[] { 1 },
                [0x00BF] = new byte[] { 1 },
                [0x00C0] = new byte[] { 1 },
                [0x00C1] = new byte[] { 1, 2 },
                [0x00C2] = new byte[] { 1, 2 },
                [0x00C3] = new byte[] { 1, 2 },
                [0x00C4] = new byte[] { 1, 2 },
                [0x00C5] = new byte[] { 1, 2 },
                [0x00C6] = new byte[] { 1, 2 },
                [0x00C7] = new byte[] { 1, 2 },
                [0x00C8] = new byte[] { 1, 2 },
                [0x00C9] = new byte[] { 1 },
                [0x00CA] = new byte[] { 1, 2, 2, 1 },
                [0x00CB] = new byte[] { 1 },
                [0x00CC] = new byte[] { 1 },
                [0x00CD] = new byte[] { 1 },
                [0x00CE] = new byte[] { 2 },
                [0x00CF] = new byte[] { 1 },
                [0x00D0] = new byte[] { 1, 2 },
                [0x00D1] = new byte[] { 1, 2 },
                [0x00D2] = new byte[] { 1, 2 },
                [0x00D3] = new byte[] { 1, 2 },
                [0x00D4] = new byte[] { 2 },
                [0x00D5] = new byte[] { 2, 2, 2 },
                [0x00D6] = new byte[] { 2, 2 },
                [0x00D7] = new byte[] { 2, 2, 2 },
                [0x00D8] = new byte[] { 2, 2, 2 },
                [0x00D9] = new byte[] { 2 },
                [0x00DA] = new byte[] { 2 },
                [0x00DB] = new byte[1] { 0 },
                [0x00DC] = new byte[] { 2 },
                [0x00DD] = new byte[] { 2, 1 },
                [0x00DE] = new byte[] { 2 },
                [0x00DF] = new byte[] { 1, 2 },
                [0x00E0] = new byte[] { 1, 2 },
                [0x00E1] = new byte[] { 1, 2 },
                [0x00E2] = new byte[] { 2, 2, 2, 2 },
                [0x00E3] = new byte[] { 2, 2, 2, 2 },
                [0x00E4] = new byte[] { 2 },
                [0x00E5] = new byte[] { 2, 2 },
                [0x00E6] = new byte[1] { 0 },
                [0x00E7] = new byte[] { 2, 2, 2 },
                [0x00E8] = new byte[] { 2, 2, 2 },
                [0x00E9] = new byte[] { 2 },
                [0x00EA] = new byte[] { 2, 2, 2, 2 },
                [0x00EB] = new byte[] { 2 },
                [0x00EC] = new byte[] { 2, 2, 2, 2, 2 },
                [0x00ED] = new byte[1] { 0 },
                [0x00EE] = new byte[] { 2, 2, 2, 2 },
                [0x00EF] = new byte[] { 2, 2 },
                [0x00F0] = new byte[] { 2, 2, 2, 2, 2 },
                [0x00F1] = new byte[] { 2 },
                [0x00F2] = new byte[] { 1, 1, 2, 2 },
                [0x00F3] = new byte[] { 2 },
                [0x00F4] = new byte[] { 2 },
                [0x00F5] = new byte[] { 2 },
                [0x00F6] = new byte[] { 2 },
                [0x00F7] = new byte[1] { 0 },
                [0x00F8] = new byte[] { 2 },
                [0x00F9] = new byte[] { 2, 2 },
                [0x00FA] = new byte[] { 2, 2 },
                [0x00FB] = new byte[1] { 0 },
                [0x00FC] = new byte[1] { 0 },
                [0x00FD] = new byte[] { 2 },
                [0x00FE] = new byte[] { 2 },
                [0x00FF] = new byte[] { 2, 2 },
                [0x0100] = new byte[] { 2 },
                [0x0101] = new byte[] { 2 },
                [0x0102] = new byte[] { 2, 2 },
                [0x0103] = new byte[] { 1, 1 },
                [0x0104] = new byte[] { 2 },
                [0x0105] = new byte[] { 2 },
                [0x0106] = new byte[1] { 0 },
                [0x0107] = new byte[1] { 0 },
                [0x0108] = new byte[] { 2 },
                [0x0109] = new byte[1] { 0 },
                [0x010A] = new byte[1] { 0 },
                [0x010B] = new byte[] { 2, 2 },
                [0x010C] = new byte[] { 2 },
                [0x010D] = new byte[] { 2, 2, 2, 2 },
                [0x010E] = new byte[] { 2 },
                [0x010F] = new byte[] { 2, 2 },
                [0x0110] = new byte[] { 2 },
                [0x0111] = new byte[] { 2 },
                [0x0112] = new byte[] { 2, 2 },
                [0x0113] = new byte[] { 2 },
                [0x0114] = new byte[] { 2 },
                [0x0115] = new byte[] { 2 },
                [0x0116] = new byte[] { 2, 2, 2, 2 },
                [0x0117] = new byte[1] { 0 },
                [0x0118] = new byte[1] { 0 },
                [0x0119] = new byte[] { 2 },
                [0x011A] = new byte[1] { 0 },
                [0x011B] = new byte[1] { 0 },
                [0x011C] = new byte[1] { 0 },
                [0x011D] = new byte[] { 2, 2 },
                [0x011E] = new byte[] { 2 },
                [0x011F] = new byte[] { 2, 2 },
                [0x0120] = new byte[] { 2, 2 },
                [0x0121] = new byte[] { 2 },
                [0x0122] = new byte[] { 2, 2 },
                [0x0123] = new byte[1] { 0 },
                [0x0124] = new byte[1] { 0 },
                [0x0125] = new byte[1] { 0 },
                [0x0126] = new byte[] { 2, 2 },
                [0x0127] = new byte[] { 2 },
                [0x0128] = new byte[] { 2 },
                [0x0129] = new byte[1] { 0 },
                [0x012A] = new byte[] { 2, 2, 2, 2 },
                [0x012B] = new byte[] { 2 },
                [0x012C] = new byte[] { 2 },
                [0x012D] = new byte[] { 2 },
                [0x012E] = new byte[] { 2, 2 },
                [0x012F] = new byte[] { 2, 2 },
                [0x0130] = new byte[] { 2 },
                [0x0131] = new byte[1] { 0 },
                [0x0132] = new byte[] { 2, 2, 2, 2 },
                [0x0133] = new byte[] { 2, 2, 2, 2, 1 },
                [0x0134] = new byte[] { 1 },
                [0x0135] = new byte[] { 1 },
                [0x0136] = new byte[] { 1 },
                [0x0137] = new byte[] { 1 },
                [0x0138] = new byte[1] { 0 },
                [0x0139] = new byte[] { 2, 2, 2, 2 },
                [0x013A] = new byte[1] { 0 },
                [0x013B] = new byte[1] { 0 },
                [0x013C] = new byte[1] { 0 },
                [0x013D] = new byte[] { 1 },
                [0x013E] = new byte[1] { 0 },
                [0x013F] = new byte[] { 2 },
                [0x0140] = new byte[] { 2 },
                [0x0141] = new byte[] { 2 },
                [0x0142] = new byte[] { 1, 2 },
                [0x0143] = new byte[] { 2, 2 },
                [0x0144] = new byte[1] { 0 },
                [0x0145] = new byte[1] { 0 },
                [0x0146] = new byte[1] { 0 },
                [0x0147] = new byte[] { 1 },
                [0x0148] = new byte[] { 1 },
                [0x0149] = new byte[1] { 0 },
                [0x014A] = new byte[1] { 0 },
                [0x014B] = new byte[1] { 0 },
                [0x014C] = new byte[] { 2 },
                [0x014D] = new byte[] { 2 },
                [0x014E] = new byte[1] { 0 },
                [0x014F] = new byte[1] { 0 },
                [0x0150] = new byte[1] { 0 },
                [0x0151] = new byte[1] { 0 },
                [0x0152] = new byte[] { 2, 2, 2 },
                [0x0153] = new byte[] { 2, 2, 2, 2, 2 },
                [0x0154] = new byte[] { 2, 2 },
                [0x0155] = new byte[] { 2, 2 },
                [0x0156] = new byte[] { 2, 2, 2 },
                [0x0157] = new byte[1] { 0 },
                [0x0158] = new byte[] { 2, 2 },
                [0x0159] = new byte[1] { 0 },
                [0x015A] = new byte[1] { 0 },
                [0x015B] = new byte[] { 2, 2 },
                [0x015C] = new byte[] { 2 },
                [0x015D] = new byte[1] { 0 },
                [0x015E] = new byte[1] { 0 },
                [0x015F] = new byte[] { 2 },
                [0x0160] = new byte[] { 1, 2, 2 },
                [0x0161] = new byte[] { 1, 2 },
                [0x0162] = new byte[] { 2, 2 },
                [0x0163] = new byte[] { 2, 2 },
                [0x0164] = new byte[] { 2 },
                [0x0165] = new byte[] { 2, 2 },
                [0x0166] = new byte[] { 2 },
                [0x0167] = new byte[] { 2 },
                [0x0168] = new byte[] { 2 },
                [0x0169] = new byte[] { 2, 2 },
                [0x016A] = new byte[] { 2, 2 },
                [0x016B] = new byte[] { 1, 2, 2 },
                [0x016C] = new byte[] { 2 },
                [0x016D] = new byte[1] { 0 },
                [0x016E] = new byte[1] { 0 },
                [0x016F] = new byte[] { 2, 2 },
                [0x0170] = new byte[] { 2, 2 },
                [0x0171] = new byte[1] { 0 },
                [0x0172] = new byte[1] { 0 },
                [0x0173] = new byte[] { 2, 2 },
                [0x0174] = new byte[] { 2, 2 },
                [0x0175] = new byte[] { 2 },
                [0x0176] = new byte[] { 2 },
                [0x0177] = new byte[] { 2 },
                [0x0178] = new byte[1] { 0 },
                [0x0179] = new byte[] { 2 },
                [0x017A] = new byte[] { 2, 2 },
                [0x017B] = new byte[] { 2 },
                [0x017C] = new byte[] { 2, 2 },
                [0x017D] = new byte[] { 2 },
                [0x017E] = new byte[] { 2, 2 },
                [0x017F] = new byte[] { 2, 2 },
                [0x0180] = new byte[] { 1 },
                [0x0181] = new byte[] { 2, 2 },
                [0x0182] = new byte[] { 2 },
                [0x0183] = new byte[] { 2 },
                [0x0184] = new byte[] { 2 },
                [0x0185] = new byte[] { 2 },
                [0x0186] = new byte[] { 2, 2 },
                [0x0187] = new byte[] { 2 },
                [0x0188] = new byte[] { 2, 2, 2 },
                [0x0189] = new byte[] { 2, 2, 2 },
                [0x018A] = new byte[] { 2 },
                [0x018B] = new byte[] { 2 },
                [0x018C] = new byte[] { 2, 2 },
                [0x018D] = new byte[] { 2, 2 },
                [0x018E] = new byte[] { 2, 2, 2 },
                [0x018F] = new byte[] { 1, 2, 2 },
                [0x0190] = new byte[] { 1 },
                [0x0191] = new byte[1] { 0 },
                [0x0192] = new byte[1] { 0 },
                [0x0193] = new byte[] { 2, 2 },
                [0x0194] = new byte[] { 2, 2, 2 },
                [0x0195] = new byte[] { 2, 2 },
                [0x0196] = new byte[] { 2 },
                [0x0197] = new byte[] { 2, 2 },
                [0x0198] = new byte[] { 2, 2 },
                [0x0199] = new byte[1] { 0 },
                [0x019A] = new byte[] { 2, 2 },
                [0x019B] = new byte[1] { 0 },
                [0x019C] = new byte[] { 2, 2, 2 },
                [0x019D] = new byte[] { 2, 2, 2, 2 },
                [0x019E] = new byte[] { 2 },
                [0x019F] = new byte[] { 2 },
                [0x01A0] = new byte[] { 2, 2, 2 },
                [0x01A1] = new byte[] { 2, 2 },
                [0x01A2] = new byte[] { 2, 2 },
                [0x01A3] = new byte[] { 2, 2, 2 },
                [0x01A4] = new byte[] { 2 },
                [0x01A5] = new byte[1] { 0 },
                [0x01A6] = new byte[1] { 0 },
                [0x01A7] = new byte[] { 2 },
                [0x01A8] = new byte[] { 2 },
                [0x01A9] = new byte[] { 2 },
                [0x01AA] = new byte[] { 1, 2, 2 },
                [0x01AB] = new byte[] { 2, 2 },
                [0x01AC] = new byte[] { 2 },
                [0x01AD] = new byte[] { 2 },
                [0x01AE] = new byte[] { 2, 2, 2 },
                [0x01AF] = new byte[] { 2, 2, 2 },
                [0x01B0] = new byte[] { 2, 2 },
                [0x01B1] = new byte[] { 2, 2, 2 },
                [0x01B2] = new byte[] { 2, 2 },
                [0x01B3] = new byte[] { 2, 2 },
                [0x01B4] = new byte[1] { 0 },
                [0x01B5] = new byte[] { 2 },
                [0x01B6] = new byte[] { 2, 2 },
                [0x01B7] = new byte[] { 2, 2 },
                [0x01B8] = new byte[] { 2, 2 },
                [0x01B9] = new byte[] { 2, 2 },
                [0x01BA] = new byte[] { 2, 2 },
                [0x01BB] = new byte[1] { 0 },
                [0x01BC] = new byte[] { 2, 2 },
                [0x01BD] = new byte[] { 2 },
                [0x01BE] = new byte[] { 2 },
                [0x01BF] = new byte[] { 2 },
                [0x01C0] = new byte[] { 2, 2, 2, 2, 2 },
                [0x01C1] = new byte[] { 2, 2 },
                [0x01C2] = new byte[] { 2 },
                [0x01C3] = new byte[] { 2 },
                [0x01C4] = new byte[] { 2, 2 },
                [0x01C5] = new byte[1] { 0 },
                [0x01C6] = new byte[1] { 0 },
                [0x01C7] = new byte[] { 2 },
                [0x01C8] = new byte[] { 2, 2 },
                [0x01C9] = new byte[] { 2, 2 },
                [0x01CA] = new byte[] { 2, 2, 2 },
                [0x01CB] = new byte[1] { 0 },
                [0x01CC] = new byte[] { 2, 2 },
                [0x01CD] = new byte[] { 1, 2, 2 },
                [0x01CE] = new byte[] { 2 },
                [0x01CF] = new byte[1] { 0 },
                [0x01D0] = new byte[] { 1 },
                [0x01D1] = new byte[] { 2, 2, 2 },
                [0x01D2] = new byte[] { 2, 2 },
                [0x01D3] = new byte[] { 2 },
                [0x01D4] = new byte[] { 2, 2 },
                [0x01D5] = new byte[] { 2 },
                [0x01D6] = new byte[] { 1 },
                [0x01D7] = new byte[1] { 0 },
                [0x01D8] = new byte[] { 2 },
                [0x01D9] = new byte[] { 2 },
                [0x01DA] = new byte[1] { 0 },
                [0x01DB] = new byte[] { 2, 2 },
                [0x01DC] = new byte[1] { 0 },
                [0x01DD] = new byte[] { 1, 2 },
                [0x01DE] = new byte[] { 2, 2, 2, 2 },
                [0x01DF] = new byte[1] { 0 },
                [0x01E0] = new byte[] { 2, 2, 2 },
                [0x01E1] = new byte[] { 2, 2 },
                [0x01E2] = new byte[] { 2, 2 },
                [0x01E3] = new byte[] { 2, 2 },
                [0x01E4] = new byte[] { 2 },
                [0x01E5] = new byte[] { 2 },
                [0x01E6] = new byte[1] { 0 },
                [0x01E7] = new byte[] { 2 },
                [0x01E8] = new byte[] { 2, 2 },
                [0x01E9] = new byte[] { 2 },
                [0x01EA] = new byte[] { 2 },
                [0x01EB] = new byte[] { 2 },
                [0x01EC] = new byte[] { 2, 2, 2 },
                [0x01ED] = new byte[] { 2, 2, 2 },
                [0x01EE] = new byte[] { 2, 2 },
                [0x01EF] = new byte[] { 2 },
                [0x01F0] = new byte[1] { 0 },
                [0x01F1] = new byte[] { 2, 2, 2 },
                [0x01F2] = new byte[] { 2, 2, 2, 2, 2 },
                [0x01F3] = new byte[] { 2, 2, 2, 2, 2 },
                [0x01F4] = new byte[] { 1 },
                [0x01F5] = new byte[] { 1 },
                [0x01F6] = new byte[] { 2, 2 },
                [0x01F7] = new byte[] { 2 },
                [0x01F8] = new byte[] { 2, 2, 2, 2 },
                [0x01F9] = new byte[] { 0 },
                [0x01FA] = new byte[] { 1, 2 },
                [0x01FB] = new byte[] { 2 },
                [0x01FC] = new byte[] { 2 },
                [0x01FD] = new byte[] { 2 },
                [0x01FE] = new byte[1] { 0 },
                [0x01FF] = new byte[] { 2, 2 },
                [0x0200] = new byte[] { 2 },
                [0x0201] = new byte[] { 2, 2, 2 },
                [0x0202] = new byte[] { 2 },
                [0x0203] = new byte[] { 2 },
                [0x0204] = new byte[] { 1, 2 },
                [0x0205] = new byte[] { 2, 2 },
                [0x0206] = new byte[] { 2 },
                [0x0207] = new byte[] { 1, 2 },
                [0x0208] = new byte[] { 2 },
                [0x0209] = new byte[1] { 0 },
                [0x020A] = new byte[] { 2 },
                [0x020B] = new byte[] { 2, 2, 2, 2, 2 },
                [0x020C] = new byte[] { 2, 2, 2, 2, 2 },
                [0x020D] = new byte[] { 1, 2 },
                [0x020E] = new byte[1] { 0 },
                [0x020F] = new byte[] { 2 },
                [0x0210] = new byte[] { 2 },
                [0x0211] = new byte[] { 2 },
                [0x0212] = new byte[] { 1, 2 },
                [0x0213] = new byte[] { 1, 2 },
                [0x0214] = new byte[] { 2, 2, 2 },
                [0x0215] = new byte[] { 2, 2, 2 },
                [0x0216] = new byte[] { 2 },
                [0x0217] = new byte[] { 2, 2 },
                [0x0218] = new byte[] { 2 },
                [0x0219] = new byte[1] { 0 },
                [0x021A] = new byte[] { 2, 2 },
                [0x021B] = new byte[1] { 0 },
                [0x021C] = new byte[] { 2 },
                [0x021D] = new byte[] { 1, 2, 2 },
                [0x021E] = new byte[1] { 0 },
                [0x021F] = new byte[] { 2, 2 },
                [0x0220] = new byte[1] { 0 },
                [0x0221] = new byte[] { 2 },
                [0x0222] = new byte[] { 1, 2 },
                [0x0223] = new byte[] { 2 },
                [0x0224] = new byte[1] { 0 },
                [0x0225] = new byte[] { 2 },
                [0x0226] = new byte[] { 1 },
                [0x0227] = new byte[] { 2 },
                [0x0228] = new byte[] { 2, 2 },
                [0x0229] = new byte[] { 1, 2 },
                [0x022A] = new byte[1] { 0 },
                [0x022B] = new byte[] { 2 },
                [0x022C] = new byte[] { 2 },
                [0x022D] = new byte[] { 2, 2 },
                [0x022E] = new byte[] { 2, 2 },
                [0x022F] = new byte[] { 2 },
                [0x0230] = new byte[] { 2, 2, 2 },
                [0x0231] = new byte[] { 2, 2, 2, 2 },
                [0x0232] = new byte[] { 2, 2, 2, 1 },
                [0x0233] = new byte[] { 2, 2 },
                [0x0234] = new byte[] { 2 },
                [0x0235] = new byte[] { 2 },
                [0x0236] = new byte[1] { 0 },
                [0x0237] = new byte[] { 2, 2, 2, 2 },
                [0x0238] = new byte[] { 2, 2 },
                [0x0239] = new byte[] { 2 },
                [0x023A] = new byte[] { 2, 2, 2 },
                [0x023B] = new byte[] { 2 },
                [0x023C] = new byte[] { 2 },
                [0x023D] = new byte[1] { 0 },
                [0x023E] = new byte[] { 2, 2 },
                [0x023F] = new byte[1] { 0 },
                [0x0240] = new byte[] { 2 },
                [0x0241] = new byte[1] { 0 },
                [0x0242] = new byte[1] { 0 },
                [0x0243] = new byte[1] { 0 },
                [0x0244] = new byte[] { 1, 2 },
                [0x0245] = new byte[] { 2, 2 },
                [0x0246] = new byte[] { 2, 2, 2 },
                [0x0247] = new byte[] { 2 },
                [0x0248] = new byte[] { 2 },
                [0x0249] = new byte[1] { 0 },
                [0x024A] = new byte[] { 2 },
                [0x024B] = new byte[1] { 0 },
                [0x024C] = new byte[] { 2 },
                [0x024D] = new byte[] { 2, 2, 1 },
                [0x024E] = new byte[] { 2 },
                [0x024F] = new byte[] { 0 },
                [0x0250] = new byte[] { 2 },
                [0x0251] = new byte[1] { 0 },
                [0x0252] = new byte[] { 2 },
                [0x0253] = new byte[] { 2 },
                [0x0254] = new byte[] { 2 },
                [0x0255] = new byte[1] { 0 },
                [0x0256] = new byte[] { 2, 2 },
                [0x0257] = new byte[1] { 0 },
                [0x0258] = new byte[1] { 0 },
                [0x0259] = new byte[1] { 0 },
                [0x025A] = new byte[] { 2 },
                [0x025B] = new byte[1] { 0 },
                [0x025C] = new byte[] { 2 },
                [0x025D] = new byte[] { 2 },
                [0x025E] = new byte[1] { 0 },
                [0x025F] = new byte[1] { 0 },
                [0x0260] = new byte[] { 2, 2, 2 },
                [0x0261] = new byte[1] { 0 },
                [0x0262] = new byte[1] { 0 },
                [0x0263] = new byte[] { 2, 2, 2, 2, 2, 2 },
                [0x0264] = new byte[] { 2 },
                [0x0265] = new byte[] { 2 },
                [0x0266] = new byte[] { 2 },
                [0x0267] = new byte[] { 2, 2 },
                [0x0268] = new byte[] { 2 },
                [0x0269] = new byte[] { 2, 2 },
                [0x026A] = new byte[] { 2 },
                [0x026B] = new byte[] { 2 },
                [0x026C] = new byte[] { 1 },
                [0x026D] = new byte[] { 2 },
                [0x026E] = new byte[] { 2, 2 },
                [0x026F] = new byte[] { 2 },
                [0x0270] = new byte[] { 2 },
                [0x0271] = new byte[] { 2, 2, 2 },
                [0x0272] = new byte[] { 1, 2 },
                [0x0273] = new byte[] { 1 },
                [0x0274] = new byte[] { 2, 2 },
                [0x0275] = new byte[] { 2 },
                [0x0276] = new byte[] { 2, 2, 2 },
                [0x0277] = new byte[] { 2, 2, 2 },
                [0x0278] = new byte[] { 2, 2 },
                [0x0279] = new byte[] { 2, 2, 2 },
                [0x027A] = new byte[] { 2, 2 },
                [0x027B] = new byte[] { 2, 2 },
                [0x027C] = new byte[] { 2 },
                [0x027D] = new byte[] { 2, 2, 2 },
                [0x027E] = new byte[] { 2, 2, 2 },
                [0x027F] = new byte[] { 2, 2, 2 },
                [0x0280] = new byte[] { 2, 2, 2 },
                [0x0281] = new byte[] { 2, 2, 2 },
                [0x0282] = new byte[] { 2, 2, 2 },
                [0x0283] = new byte[] { 2, 2, 2 },
                [0x0284] = new byte[] { 2, 2, 2 },
                [0x0285] = new byte[] { 2, 2, 2 },
                [0x0286] = new byte[] { 2 },
                [0x0287] = new byte[] { 2 },
                [0x0288] = new byte[] { 2 },
                [0x0289] = new byte[1] { 0 },
                [0x028A] = new byte[] { 2 },
                [0x028B] = new byte[] { 2, 2, 2 },
                [0x028C] = new byte[] { 2, 2, 2 },
                [0x028D] = new byte[] { 2, 2, 2, 2 },
                [0x028E] = new byte[] { 2, 2, 2 },
                [0x028F] = new byte[] { 2, 2 },
                [0x0290] = new byte[] { 2, 2 },
                [0x0291] = new byte[] { 2, 2, 2, 2 },
                [0x0292] = new byte[] { 1, 2 },
                [0x0293] = new byte[] { 2 },
                [0x0294] = new byte[] { 2 },
                [0x0295] = new byte[1] { 0 },
                [0x0296] = new byte[] { 2, 2, 2 },
                [0x0297] = new byte[] { 2 },
                [0x0298] = new byte[1] { 0 },
                [0x0299] = new byte[] { 2 },
                [0x029A] = new byte[] { 2, 2 },
                [0x029B] = new byte[] { 2, 2, 2, 2 },
                [0x029C] = new byte[] { 1, 2 },
                [0x029D] = new byte[] { 2, 2 },
                [0x029E] = new byte[] { 2, 2 },
                [0x029F] = new byte[1] { 0 },
                [0x02A0] = new byte[] { 2, 2, 2 },
                [0x02A1] = new byte[] { 2, 2, 2, 2, 2 },
                [0x02A2] = new byte[] { 2, 2 },
                [0x02A3] = new byte[] { 2, 2, 2, 2 },
                [0x02A4] = new byte[] { 2, 2 },
                [0x02A5] = new byte[1] { 0 },
                [0x02A6] = new byte[] { 2, 2, 2 },
                [0x02A7] = new byte[] { 2, 2 },
                [0x02A8] = new byte[] { 2, 2 },
                [0x02A9] = new byte[] { 2 },
                [0x02AA] = new byte[] { 2 },
                [0x02AB] = new byte[] { 2 },
                [0x02AC] = new byte[1] { 0 },
                [0x02AD] = new byte[] { 2, 2 },
                [0x02AE] = new byte[1] { 0 },
                [0x02AF] = new byte[] { 2 },
                [0x02B0] = new byte[] { 2 },
                [0x02B1] = new byte[] { 2 },
                [0x02B2] = new byte[] { 2, 2 },
                [0x02B3] = new byte[] { 2 },
                [0x02B4] = new byte[1] { 0 },
                [0x02B5] = new byte[] { 2 },
                [0x02B6] = new byte[] { 2 },
                [0x02B7] = new byte[] { 2 },
                [0x02B8] = new byte[] { 2 },
                [0x02B9] = new byte[1] { 0 },
                [0x02BA] = new byte[] { 1, 2, 2 },
                [0x02BB] = new byte[1] { 0 },
                [0x02BC] = new byte[] { 2 },
                [0x02BD] = new byte[] { 2, 2, 2, 2 },
                [0x02BE] = new byte[1] { 0 },
                [0x02BF] = new byte[1] { 0 },
                [0x02C0] = new byte[] { 2 },
                [0x02C1] = new byte[1] { 0 },
                [0x02C2] = new byte[] { 2 },
                [0x02C3] = new byte[] { 2, 2 },
                [0x02C4] = new byte[] { 2 },
                [0x02C5] = new byte[1] { 0 },
                [0x02C6] = new byte[1] { 0 },
                [0x02C7] = new byte[] { 2 },
                [0x02C8] = new byte[] { 1 },
                [0x02C9] = new byte[] { 1 },
                [0x02CA] = new byte[] { 1 },
                [0x02CB] = new byte[1] { 0 },
                [0x02CC] = new byte[1] { 0 },
                [0x02CD] = new byte[] { 2 },
                [0x02CE] = new byte[] { 1, 2 },
                [0x02CF] = new byte[] { 2, 2 },
                [0x02D0] = new byte[] { 2 },
                [0x02D1] = new byte[] { 2 },
                [0x02D2] = new byte[] { 1, 1, 2, 2, 2 },
                [0x02D3] = new byte[] { 2, 2, 2 },
                [0x02D4] = new byte[] { 2, 2 },
                [0x02D5] = new byte[] { 1, 2 },
                [0x02D6] = new byte[1] { 0 },
                [0x02D7] = new byte[] { 2 },
                [0x02D8] = new byte[] { 1 },
                [0x02D9] = new byte[] { 2 },
                [0x02DA] = new byte[] { 2, 2, 2 },
                [0x02DB] = new byte[] { 2, 2, 2 },
                [0x02DC] = new byte[] { 2 },
                [0x02DD] = new byte[] { 1, 2 },
                [0x02DE] = new byte[] { 1 },
                [0x02DF] = new byte[] { 2 },
                [0x02E0] = new byte[1] { 0 },
                [0x02E1] = new byte[] { 2 },
                [0x02E2] = new byte[] { 2 },
                [0x02E3] = new byte[1] { 0 },
                [0x02E4] = new byte[] { 2, 2, 2 },
                [0x02E5] = new byte[] { 2, 2, 2, 2 },
                [0x02E6] = new byte[] { 2, 2, 2 },
                [0x02E7] = new byte[] { 2 },
                [0x02E8] = new byte[1] { 0 },
                [0x02E9] = new byte[] { 1, 2 },
                [0x02EA] = new byte[1] { 0 },
                [0x02EB] = new byte[1] { 0 },
                [0x02EC] = new byte[] { 2 },
                [0x02ED] = new byte[] { 1, 1, 1, 1, 2 },
                [0x02EE] = new byte[] { 1, 1, 1, 1, 2 },
                [0x02EF] = new byte[] { 2, 2, 2 },
                [0x02F0] = new byte[1] { 0 },
                [0x02F1] = new byte[1] { 0 },
                [0x02F2] = new byte[1] { 0 },
                [0x02F3] = new byte[1] { 0 },
                [0x02F4] = new byte[1] { 0 },
                [0x02F5] = new byte[] { 2, 2 },
                [0x02F6] = new byte[] { 2, 2, 2 },
                [0x02F7] = new byte[1] { 0 },
                [0x02F8] = new byte[1] { 0 },
                [0x02F9] = new byte[] { 2 },
                [0x02FA] = new byte[] { 2 },
                [0x02FB] = new byte[1] { 0 },
                [0x02FC] = new byte[1] { 0 },
                [0x02FD] = new byte[1] { 0 },
                [0x02FE] = new byte[] { 2, 2 },
                [0x02FF] = new byte[] { 2, 2 },
                [0x0300] = new byte[1] { 0 },
                [0x0301] = new byte[1] { 0 },
                [0x0302] = new byte[] { 2 },
                [0x0303] = new byte[1] { 0 },
                [0x0304] = new byte[] { 2, 2, 2, 2 },
                [0x0305] = new byte[] { 2 },
                [0x0306] = new byte[] { 2, 2 },
                [0x0307] = new byte[] { 2, 2 },
                [0x0308] = new byte[1] { 0 },
                [0x0309] = new byte[] { 2, 2 },
                [0x030A] = new byte[1] { 0 },
                [0x030B] = new byte[] { 2, 2 },
                [0x030C] = new byte[] { 2 },
                [0x030D] = new byte[] { 2 },
                [0x030E] = new byte[1] { 0 },
                [0x030F] = new byte[] { 1 },
                [0x0310] = new byte[] { 2 },
                [0x0311] = new byte[] { 2, 1 },
                [0x0312] = new byte[] { 1 },
                [0x0313] = new byte[] { 2, 2, 2 },
                [0x0314] = new byte[] { 1, 2 },
                [0x0315] = new byte[] { 1 },
                [0x0316] = new byte[] { 2, 2 },
                [0x0317] = new byte[] { 2, 2, 2 },
                [0x0318] = new byte[] { 2, 2 },
                [0x0319] = new byte[] { 2, 2 },
                [0x031A] = new byte[] { 2, 2, 2 },
                [0x031B] = new byte[] { 2, 2 },
                [0x031C] = new byte[1] { 0 },
                [0x031D] = new byte[] { 2 },
                [0x031E] = new byte[] { 2 },
                [0x031F] = new byte[] { 2 },
                [0x0320] = new byte[] { 2 },
                [0x0321] = new byte[] { 2 },
                [0x0322] = new byte[1] { 0 },
                [0x0323] = new byte[] { 2, 2 },
                [0x0324] = new byte[] { 1 },
                [0x0325] = new byte[1] { 0 },
                [0x0326] = new byte[1] { 0 },
                [0x0327] = new byte[] { 2, 2 },
                [0x0328] = new byte[] { 2 },
                [0x0329] = new byte[] { 2 },
                [0x032A] = new byte[1] { 0 },
                [0x032B] = new byte[] { 2, 2 },
                [0x032C] = new byte[] { 2, 2, 2, 2 },
                [0x032D] = new byte[] { 2 },
                [0x032E] = new byte[1] { 0 },
                [0x032F] = new byte[] { 2 },
                [0x0330] = new byte[1] { 0 },
                [0x0331] = new byte[] { 1 },
                [0x0332] = new byte[1] { 0 },
                [0x0333] = new byte[] { 2 },
                [0x0334] = new byte[] { 1 },
                [0x0335] = new byte[] { 2, 2 },
                [0x0336] = new byte[] { 2 },
                [0x0337] = new byte[] { 2 },
                [0x0338] = new byte[] { 2 },
                [0x0339] = new byte[] { 2, 2 },
                [0x033A] = new byte[] { 2 },
                [0x033B] = new byte[] { 2, 2 },
                [0x033C] = new byte[] { 2, 2, 1 },
                [0x033D] = new byte[] { 1, 2 },
                [0x033E] = new byte[] { 2 },
                [0x033F] = new byte[] { 2 },
                [0x0340] = new byte[] { 2 },
                [0x0341] = new byte[] { 2 },
                [0x0342] = new byte[] { 2 },
                [0x0343] = new byte[] { 2 },
                [0x0344] = new byte[] { 2 },
                [0x0345] = new byte[] { 2 },
                [0x0346] = new byte[] { 2, 2 },
                [0x0347] = new byte[] { 2 },
                [0x0348] = new byte[] { 2, 2 },
                [0x0349] = new byte[] { 1 },
                [0x034A] = new byte[] { 1 },
                [0x034B] = new byte[] { 2, 2 },
                [0x034C] = new byte[] { 1, 2 },
                [0x034D] = new byte[] { 1, 2 },
                [0x034E] = new byte[] { 2, 2, 2 },
                [0x034F] = new byte[] { 2 },
                [0x0350] = new byte[] { 2 },
                [0x0351] = new byte[] { 1, 2 },
                [0x0352] = new byte[] { 2, 1 },
                [0x0353] = new byte[] { 1 },
                [0x0354] = new byte[] { 1, 1 }
            };

            // Maybe for the future... we might merge the Params and Names dictionaries
            public static Dictionary<ushort, (string, byte[], bool, bool)> DPPtCommands = new Dictionary<ushort, (string, byte[], bool, bool)>() {
                    [0x0000] = ("Nop",
                    null,
                    false,
                    false),

                    [0x0001] = ("Dummy",
                    null,
                    false,
                    false),

                    [0x0002] = ("End",
                    null,
                    false,
                    false),

                    [0x0003] = ("WaitTime",
                    new byte[2] { 16, 16 },
                    false,
                    false),

                    [0x0004] = ("RegValueSet",
                    new byte[2] { 8, 8 },
                    false,
                    false),

                    [0x0005] = ("RegDataSet",
                    new byte[2] { 8, 32 },
                    false,
                    false),

                    [0x0006] = ("RegAdrsSet",
                    new byte[2] { 8, 32 },
                    false,
                    false),

                    [0x0007] = ("AdrsValueSet",
                    new byte[2] { 32, 8 },
                    false,
                    false),

                    [0x0008] = ("AdrsRegSet",
                    new byte[2] { 32, 8 },
                    false,
                    false),

                    [0x0009] = ("RegRegSet",
                    new byte[2] { 8, 8 },
                    false,
                    false),

                    [0x000A] = ("AdrsAdrsSet",
                    new byte[2] { 32, 32 },
                    false,
                    false),

                    [0x000B] = ("IfRegReg",
                    new byte[2] { 8, 8 },
                    false,
                    false),

                    [0x000C] = ("IfRegValue",
                    new byte[2] { 8, 8 },
                    false,
                    false),

                    [0x000D] = ("IfRegAdrs",
                    new byte[2] { 8, 32 },
                    false,
                    false),

                    [0x000E] = ("IfAdrsReg",
                    new byte[2] { 32, 8 },
                    false,
                    false),

                    [0x000F] = ("IfAdrsValue",
                    new byte[2] { 32, 8 },
                    false,
                    false),

                    [0x0010] = ("IfAdrsAdrs",
                    new byte[2] { 32, 32 },
                    false,
                    false),

                    [0x0011] = ("IfVarValue",
                    new byte[2] { 16, 16 },
                    false,
                    false),

                    [0x0012] = ("IfVarVar",
                    new byte[2] { 16, 16 },
                    false,
                    false),

                    [0x0013] = (null,
                    new byte[1] { 16 },
                    false,
                    false),

                    [0x0014] = ("CommonScript",
                    new byte[1] { 16 },
                    false,
                    false),

                    [0x0015] = ("LocalScript",
                    null,
                    false,
                    false),

                    [0x0016] = ("Jump",
                    new byte[1] { 32 },
                    true,
                    false)
                };
            // 
        }
        public static class System {
            public static Dictionary<string, uint> headerOffsetsDict = new Dictionary<string, uint>() {
                ["ADAE"] = 0xEEDBC,
                ["APAE"] = 0xEEDBC,

                ["ADAS"] = 0xEEE08,
                ["APAS"] = 0xEEE08,

                ["ADAI"] = 0xEED70,
                ["APAI"] = 0xEED70,

                ["ADAF"] = 0xEEDFC,
                ["APAF"] = 0xEEDFC,

                ["ADAD"] = 0xEEDCC,
                ["APAD"] = 0xEEDCC,

                ["ADAJ"] = 0xF0C28,
                ["APAJ"] = 0xF0C28,

                ["CPUE"] = 0xE601C,
                ["CPUS"] = 0xE60B0,
                ["CPUI"] = 0xE6038,
                ["CPUF"] = 0xE60A4,
                ["CPUD"] = 0xE6074,
                ["CPUJ"] = 0xE56F0,

                ["IPKE"] = 0xF6BE0,
                ["IPGE"] = 0xF6BE0,

                ["IPKS"] = 0xF6BC8,
                ["IPGS"] = 0xF6BD0,

                ["IPKI"] = 0xF6B58,
                ["IPGI"] = 0xF6B58,

                ["IPKF"] = 0xF6BC4,
                ["IPGF"] = 0xF6BC4,

                ["IPKD"] = 0xF6B94,
                ["IPGD"] = 0xF6B94,

                ["IPKJ"] = 0xF6390,
                ["IPGJ"] = 0xF6390
            };
            public static Dictionary<string, string> versionsDict = new Dictionary<string, string>() {
                ["ADAE"] = "D",
                ["ADAS"] = "D",
                ["ADAI"] = "D",
                ["ADAF"] = "D",
                ["ADAD"] = "D",
                ["ADAJ"] = "D",

                ["APAE"] = "P",
                ["APAS"] = "P",
                ["APAI"] = "P",
                ["APAF"] = "P",
                ["APAD"] = "P",
                ["APAJ"] = "P",

                ["CPUE"] = "Plat",
                ["CPUS"] = "Plat",
                ["CPUI"] = "Plat",
                ["CPUF"] = "Plat",
                ["CPUD"] = "Plat",
                ["CPUJ"] = "Plat",
                ["CPUP"] = "Plat",

                ["IPKE"] = "HG",
                ["IPKS"] = "HG",
                ["IPKI"] = "HG",
                ["IPKF"] = "HG",
                ["IPKD"] = "HG",
                ["IPKJ"] = "HG",

                ["IPGE"] = "SS",
                ["IPGS"] = "SS",
                ["IPGI"] = "SS",
                ["IPGF"] = "SS",
                ["IPGD"] = "SS",
                ["IPGJ"] = "SS"
            };

            public static List<string> MapCollisionPainters = new List<string>() {
                "Walkable",
                "Blocked",
                "Grass Sound",
            };
            public static List<string> MapCollisionTypePainters = new List<string>() {
                "[00] None",
                "[02] Tall Grass (Wild)",
                "[03] Very Tall Grass (Wild)",
                "[06] Tree Headbutt (HGSS)",
                "[08] Cave Floor",
                "[0B] Old Château floor",
                "[0C] Ground Mountain",
                "[10] River Water (Wild)",
                "[11] Whirlpool (HGSS)",
                "[13] Waterfall",
                "[15] Sea Water (Wild)",
                "[16] Puddle",
                "[17] Shallow Walkable water",
                "[1D] Puddle (No Splashing)",
                "[20] Ice",
                "[21] Sand",
                "[22] Cave Underwater",
                "[24] Safari Zone Border",
                "[2C] Magma",
                "[2D] Reflection",
                "[30] Block Right",
                "[31] Block Left",
                "[32] Block Up",
                "[33] Block Down",
                "[34] Block Right & Up",
                "[35] Block Left & Up",
                "[36] Block Right & Down",
                "[37] Block Left & Down",
                "[38] Jump Right",
                "[39] Jump Left",
                "[3A] Jump Up (Broken in HGSS)",
                "[3B] Jump Down",
                "[3C] Ladder front",
                "[3D] Ladder back",
                "[3E] Ladder down",
                "[3F] Jump Corner DownLeft",
                "[40] Slide Right",
                "[41] Slide Left",
                "[42] Slide Up",
                "[43] Slide Down",
                "[49] Block Down & Up",
                "[4A] Block Left & Right",
                "[4B] Horiz Rock Climb",
                "[4C] Vert Rock Climb",
                "[4D] Stop Sliding",
                "[5A] Jump Up Two Tiles",
                "[5B] Jump Down Two Tiles",
                "[5C] Jump Left Two Tiles",
                "[5D] Jump Right Two Tiles",
                "[5E] Stairs Warp (Right)",
                "[5F] Stairs Warp (Left)",
                "[62] Warp Entrance (Right)",
                "[63] Warp Entrance (Left)",
                "[64] Warp Entrance (Up)",
                "[65] Warp Entrance (Down)",
                "[67] Warp Panel",
                "[69] Door",
                "[6A] Automatic stairs Down right",
                "[6B] Automatic stairs Up right",
                "[6C] Warp Right",
                "[6D] Warp Left",
                "[6E] Warp Up",
                "[6F] Warp Down",
                "[70] Bridge Start",
                "[71] Bridge Middle",
                "[72] Bridge Over Cave",
                "[73] Bridge Over Water",
                "[74] Bridge Over Sand",
                "[75] Bridge Over Snow",
                "[76] Vertical bike bridge",
                "[77] Vertical bridge (ground enc)",
                "[78] Vertical bike bridge over water",
                "[79] Vertical bike bridge over sand",
                "[7A] Horizontal bike bridge",
                "[7B] Horizontal bike bridge over ground encounters",
                "[7C] Horizontal bike bridge over water",
                "[7D] Horizontal bike bridge over sand",
                "[80] Table",
                "[83] Storage PC",
                "[85] Open TownMap",
                "[86] TV",
                "[A0] Farm Land",
                "[A1] Deep Snow",
                "[A2] Very Deep Snow",
                "[A3] Ultra Deep Snow",
                "[A4] Mud",
                "[A5] Deep Mud",
                "[A6] Mud Grass 1",
                "[A7] Mud Grass 2",
                "[A8] Snow",
                "[A9] Snow with Shadows",
                "[D5] Bridge (Vertical)",
                "[D5] Bridge (Horizontal)",
                "[D7] Bike Jump Left",
                "[D8] Bike Jump Right",
                "[D9] Bike Slope Top",
                "[DA] Bike Slope Bottom",
                "[DB] Bike parking",
                "[E0] Small Bookshelf 1",
                "[E1] Large Bookshelf 1",
                "[E2] Large Bookshelf 2",
                "[E3] Pot",
                "[E4] Trash Can",
                "[E5] Store Shelf 1",
                "[E6] Blueprint",
                "[EA] Small Bookshelf 2",
                "[EB] Store Shelf 2",
                "[EC] Store Shelf 3",
                "[FF] No Attribute"
                    
            };

            public static class MatrixCellColors {
                /* Initialize dictionary of colors corresponding to border maps in the matrix editor */
                public static Dictionary<List<uint>, (Color back, Color fore)> DPPtmatrixColorsDict = new Dictionary<List<uint>, (Color back, Color fore)> {
                    [new List<uint> { 173, 176, 177, 179 }] = (Color.ForestGreen, Color.White),
                    [new List<uint> { 174 }] = (Color.SteelBlue, Color.White),
                    [new List<uint> { 175 }] = (Color.Sienna, Color.White),
                    [new List<uint> { 178 }] = (Color.PowderBlue, Color.Black),
                    [new List<uint> { Matrix.EMPTY }] = (Color.Black, Color.White)
                };
                public static Dictionary<List<uint>, (Color back, Color fore)> HGSSmatrixColorsDict = new Dictionary<List<uint>, (Color back, Color fore)> {
                    [new List<uint> { 208 }] = (Color.ForestGreen, Color.White),
                    [new List<uint> { 209 }] = (Color.SteelBlue, Color.White),
                    [new List<uint> { 210 }] = (Color.Sienna, Color.White),
                    [new List<uint> { Matrix.EMPTY }] = (Color.Black, Color.White)
                };
                public static Dictionary<List<uint>, (Color back, Color fore)> GenericMatrixColorsDict = new Dictionary<List<uint>, (Color back, Color fore)> {
                    [new List<uint> { 203 }] = (Color.FromArgb(80, 200, 16), Color.White),
                    [new List<uint> { 204, 209 }] = (Color.SteelBlue, Color.White),
                    [new List<uint> { 205, 206 }] = (Color.DarkGreen, Color.White),
                    [new List<uint> { 207, 208 }] = (Color.ForestGreen, Color.White),
                    [new List<uint> { 210 }] = (Color.Sienna, Color.White),
                    [new List<uint> { Matrix.EMPTY }] = (Color.Black, Color.White)
                };
            }
            public static class AreaPics {
                public static Dictionary<int, string> hgssAreaPicDict = new Dictionary<int, string>() {
                    [0] = "hgsswood",
                    [1] = "hgssgray",
                    [2] = "hgsswall",
                    [3] = "empty",
                    [4] = "hgsstown",
                    [5] = "hgsscave",
                    [6] = "hgssfield",
                    [7] = "hgsslake",
                    [8] = "hgssforest",
                    [9] = "hgsswater",
                };
            }
            public static class WeatherPics {
                public static Dictionary<byte[], string> dpWeatherImageDict = new Dictionary<byte[], string>() {
                    [new byte[] { 0, 8, 13, 18, 19, 20, 23, 25 }] = "dpnormal",
                    [new byte[] { 1 }] = "dpcloudy",
                    [new byte[] { 2 }] = "dprain",
                    [new byte[] { 3 }] = "dpheavyrain",
                    [new byte[] { 4, 24}] = "dpthunderstorm",
                    [new byte[] { 5, 28 }] = "dpsnowslow",
                    [new byte[] { 6, 21, 26, 27 }] = "dpdiamondsnow",
                    [new byte[] { 7 }] = "dpblizzard",
                    [new byte[] { 9 }] = "dpsandfall",
                    [new byte[] { 10 }] = "dpsandstorm",
                    [new byte[] { 11 }] = "dphail",
                    [new byte[] { 12 }] = "dprocksascending",
                    [new byte[] { 14 }] = "dpfog",
                    [new byte[] { 15 }] = "dpfog", //deep fog
                    [new byte[] { 16 }] = "dpdark",
                    [new byte[] { 17 }] = "dplightning",
                    [new byte[] { 22 }] = "dplightsandstorm"
                };
                public static Dictionary<byte[], string> ptWeatherImageDict = new Dictionary<byte[], string>() {
                    [new byte[] { 0, 8, 13, 20, 31, 33 } ] = "ptnormal",
                    [new byte[] { 1 } ] = "ptcloudy",
                    [new byte[] { 2, 32 } ] = "ptrain",
                    [new byte[] { 3 } ] = "ptheavyrain",
                    [new byte[] { 4 } ] = "ptthunderstorm",
                    [new byte[] { 5, 36 } ] = "ptsnowslow",
                    [new byte[] { 6, 21, 34, 35 } ] = "ptdiamondsnow",
                    [new byte[] { 7 } ] = "ptblizzard",
                    [new byte[] { 9 } ] = "ptsandfall",
                    [new byte[] { 10 } ] = "ptsandstorm",
                    [new byte[] { 11 } ] = "pthail",
                    [new byte[] { 12 } ] = "ptrocksascending",
                    [new byte[] { 14, 15 } ] = "ptfog",
                    [new byte[] { 16 } ] = "ptdark",
                    [new byte[] { 17 } ] = "ptlightning",

                    [new byte[] { 18 }] = "ptlightfog",
                    [new byte[] { 19 }] = "ptheavyfog",

                    [new byte[] { 22 }] = "ptlightsandstorm",
                    [new byte[] { 23 }] = "ptforestweather",
                    [new byte[] { 24, 25 }] = "ptspotlight",

                    [new byte[] { 26 }] = "ptdarkfog",
                    [new byte[] { 27 }] = "ptgreenish",
                    [new byte[] { 28 }] = "ptredish",
                    [new byte[] { 29 }] = "ptblueish",
                    [new byte[] { 30 }] = "ptdim",


                };
                public static Dictionary<byte[], string> hgssweatherImageDict = new Dictionary<byte[], string>() {
                    [new byte[] { 0, 1 }] = "hgssnormal",
                    [new byte[] { 2, 3, 4, 5, 6, 7, 8 }] = "hgssrain",
                    [new byte[] { 9, 10, 11, 12, 13, 15 }] = "hgsssnow",
                    [new byte[] { 14 }] = "hgssnormal", //sandstorm in battle only
                    [new byte[] { 16, 17 }] = "hgssdiamond",
                    [new byte[] { 18, 19, 20, 21 }] = "hgssfog",
                    [new byte[] { 22, 23 }] = "hgssdark",
                    [new byte[] { 24, 25 }] = "hgssdark2",
                    [new byte[] { 26 }] = "hgssArcade"
                };
            }
        }
    }
}
